据我所知,与kafka并行化的基本方法是利用分区。但是,我有一个特殊的情况,我必须利用只有6个分区的现有基础架构,我需要每秒处理数百万条记录。
有没有办法进一步优化我可以让每个kstream消费者从单个分区同时读取和均等分配负载?
答案 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 +消息/秒,具体取决于当然处理的复杂性