除了分区之外,有没有办法进一步并行化kstreams?

时间:2017-12-09 03:36:03

标签: apache-kafka apache-kafka-streams

据我所知,与kafka并行化的基本方法是利用分区。但是,我有一个特殊的情况,我必须利用只有6个分区的现有基础架构,我需要每秒处理数百万条记录。

有没有办法进一步优化我可以让每个kstream消费者从单个分区同时读取和均等分配负载?

2 个答案:

答案 0 :(得分:2)

最简单的方法是使用所需数量的分区创建“帮助程序”主题。可以使用非常短的保留时间配置本主题,因为原始数据安全地存储在实际输入主题中。您可以使用此帮助程序主题通过它来路由所有数据,从而允许更多并行下游:

builder.stream("input-topic")
       .through("helper-topic-with-many-partitions")
       ... // actual processing

答案 1 :(得分:1)

分区是并行化的级别。有6个分区 - 你最多可以有6个(kstream)实例消耗数据。如果每个实例都在一台单独的机器上,即每个实例有1 GBps的网络,那么你可以总共读取600 MB /秒

如果这还不够,您需要重新分区数据

现在要分发处理,您需要在不同的计算机上运行每个kstream(具有相同的使用者组)

这是一个简短的视频,演示了Kafka Streams(通过Kafka SQL)如何并行化为5个进程https://www.youtube.com/watch?v=denwxORF3pU

这一切都取决于分区&遗嘱执行人。有6个分区,我通常可以达到500K +消息/秒,具体取决于当然处理的复杂性