Why KIP-937 Is Important for Kafka Message Timestamps

Kafka records have timestamps, and most of the time we barely think about them. That changes quickly when a producer sends nanoseconds instead of milliseconds. Suddenly, a record can appear to come from hundreds of years in the future. Kafka may accept it, while the original mistake stays hidden until it starts affecting retention, log segments, or downstream consumers. KIP-937 addresses this problem directly. It separates timestamps in the past from timestamps in the future, so operators can allow legitimate historical data without also accepting dates that are clearly implausible. ...

August 28, 2026 · 10 min · Tomás Dias Almeida

Why Kafka Partitions Are Limited per Broker

A common question when designing a Kafka cluster is: how many partitions can a broker support? There is no single answer that applies to every cluster. Kafka topics are divided into partitions so that producers and consumers can work in parallel, but every partition also creates work and state for the brokers that host it. The practical limit depends on the broker resources, replication factor, Kafka version, and operational requirements, so partition counts should be treated as an operational capacity limit, not only as a logical design choice. ...

August 25, 2026 · 5 min · Tomás Dias Almeida

Moving to GitHub Actions

Why Travis CI is blocking this blog to be generated, why? I do not know, I have credits for it, but it cannot be used, so I am forced to tick a task in my list and move to GitHub actions. Disabling Travis CI Removing GitHub <-> Travis CI integration Go to https://github.com/settings/installations Search “Travis CI” and click Configure Scroll down and click in the “Uninstall” button Go to https://github.com/settings/apps/authorizations Search “Travis CI” and click Revoke Deleting Travis CI According to this forum question, there is no UI option. Send a mail to support@travis-ci.com requesting the account deletion. Add GitHub Actions That is the easiest part as Hugo created a nice tutorial. I followed it and that is the reason why you are able to read this blog post.

January 15, 2024 · 1 min · Tomás Dias Almeida

Migrating From Junit4 to Junit5

In 2019, I gave a talk at Netcentric Summit about Junit5 migration and its advantages. You can check the content here: Video: Netcentric | JUnit 5, mockito 2 and AEM Mocks, is it true for you? Blog post: JUnit 5: leveraging new features for testing After 3 years, I wanted to revisit the procedure to migrate from junit4 to junit5, so let’s do it! The result was this PR. Steps 1. Dependencies 1.2 Main pom.xml In the main pom.xml, replace ...

June 20, 2022 · 3 min · Tomás Dias Almeida

My summary about AWS queues

I was doubting about writing this post because AWS is evolving really fast and this post will be probably old very fast. So, I am adding the AWS documentation, so, please take your time to check the official documentation to confirm my findings (and if possible, write me a message so I can update it if needed). SQS AWS SQS is a simple 1:1 queue, so it delivers messages from A to B. ...

May 29, 2022 · 3 min · Tomás Dias Almeida

Creating an archetype from an existing project

If you are creating a cloud of microservices or are in an environment where you have to generate multiple maven projects or modules, it is very useful to create archetypes to handle these new modules/projects creation. What is an archetype? A Maven archetype is a templated project. Maven offers several archetypes that allow you to create new maven modules ready to run in few seconds. How to use a generic archetype? Archetype usage is quite simple. If you want to generate an archetype based on the default list, just run: ...

May 29, 2021 · 6 min · Tomás Dias Almeida