Kafka Streams:NUM_STREAM_THREADS_CONFIG > 1 会破坏分区的总排序吗?

Kafka Streams: does NUM_STREAM_THREADS_CONFIG > 1 break partition's total ordering?

我们开始:我得到了各种连接、聚合、过滤器、映射等的相当复杂的拓扑结构。默认情况下,NUM_STREAM_THREADS_CONFIG 参数等于 1 并且根据定义这是完全确定的 - 因此,分区的总排序(由 Kafka 本身保证)保留。

一旦我将 NUM_STREAM_THREADS_CONFIG 设置为 2 或更多,是否会保留总排序? 它取决于特殊的拓扑结构吗?我检查了文档并浏览了线程模型部分,但没有找到答案。

数据始终按分区偏移顺序处理,即使您将 num.stream.threads 设置为更大的值。

在 Kafka Streams 中,子拓扑被转换为任务(基于输入主题分区),任务按偏移顺序处理其分区的记录。任务数限制了您可以保持忙碌的线程数(类似于消费者组中的最大消费者数)。如果您配置的线程多于可用任务,一些线程将保持空闲状态。

如果一个任务处理多个topics/partitions的数据,不同分区的数据没有严格的顺序保证。 Kafka Streams 会考虑记录的时间戳,优先处理时间戳小的记录。