Hi! I wrote a Kafka Streams Field Guide, with 8 essential insights. Click here to learn more!
Kafka Streams Roundup - January 2026
Hi there, welcome to the new year! In this Kafka Streams roundup I’ll cover the news and interesting content since my previous roundup for November 2025.
This year got started with some great new KIPs (Kafka Improvement Proposals):
- KIP-1271: Allow to Store Record Headers in State Stores: this first one is a big deal! It would allow header-aware processing through the entire Kafka Streams pipeline. Until now, storing data in a state store was preventing this, as it didn’t support message headers. This KIP is now under discussion.
- KIP-1244: Drop support for Kafka Streams Scala API: This new proposal aims to remove support for the Scala API, which came through the
streams-scalamodule. My take: While I love Scala, I’ve never used thestreams-scalamodule with Kafka Streams. Scala’s interoperability with Java is great, so I never felt the need for this. This KIP is in the voting phase, so cast your vote!
Then, in December last year, some great Kafka Streams articles came out. Especially Adam Souquieres had a spree of outstanding content. He’s ex-Confluent and really knows his stuff!
- Kafka Streams vs Apache Flink: A Pragmatic Comparison for Stream Processing (And why you should start with Kafka Streams !)
- Why I Stopped Using High-Level Streaming Joins. I completely agree with Adam’s take on high-level joins. To me, high-level joins (and the high-level DSL in general) were abstracting away too many important details, which also made it harder to troubleshoot. For that reason, I’m a Processor API fanboy :-D
- The Anti-Data Streaming Pattern: Stop pressuring your referential databases: This is tackling a very common problem in Kafka Streams projects. People performing heavy external calls in the Kafka Streams pipeline, causing performance to tank. I’ve seen this not only with database calls, but also with calls to unreliable and slow external REST APIs. This article provides excellent guidance! Want to know more? I’m also tackling this topic in my Kafka Streams Field Guide.
And also Jonas Geiregat wrote a great article called Why Kafka Streams JVM Looks Healthy Before Getting OOMKilled. He covers an issue that in my experience is very common with Kafka Streams deployments that make use of persistent state stores (and therefore RocksDB). The fact that your Kafka Streams application gets OOM killed, even though the JVM heap is looking healthy. If you want to know even more about this, I’ve dedicated an entire chapter on this in my Kafka Streams Field Guide.
And that wraps up the news and articles for this period!
Insight 1: Partitioning Strategy
How to size your topics, optimize message distribution, ensure ordering guarantees, and handle co-partitioning and repartitioning.
Insight 2: Rebalance Tuning
Understand warmup tasks and how they impact rebalances. Learn to configure them to reach stable, higher throughput faster.
No fluff. Just straightforward advice and deep insights to improve your Kafka Streams application's performance.