kafka streams 如何让多个topic里相同的key数据被分配到同一个task

发布于 2021-12-06 07:59:18 字数 529 浏览 898 评论 6

使用kafka stream同时消费topic A, topicB.

A和B的分区数是一样的,A和B的每条数据的key也是一致的,A和B的分区策略也是一样的(使用默认的)。

现在使用kafka streaming client进行实时计算,因为我的client是多实例的,想让A和B里的key一样的数据能不同一个client消费到,请问该如何操作呢?

以下是在网上看到的,实际测试并不行:

网址:http://www.jasongj.com/kafka/kafka_stream/

如果要得到正确的计算结果,需要保证参与Join的KTable或KStream中Key相同的数据被分配到同一个Task。具体方法是

参与Join的KTable或KStream的Key类型相同(实际上,业务含意也应该相同)
参与Join的KTable或KStream对应的Topic的Partition数相同
Partitioner策略的最终结果等效(实现不需要完全一样,只要效果一样即可),也即Key相同的情况下,被分配到ID相同的Partition内

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

爱的故事 2021-12-08 12:58:04

回答二楼的,这个是我的两个topic的分区情况,下面的图是通过kafkamanger看到的实际消费的情况

躲猫猫 2021-12-08 10:49:32

两个topic的分区数一样的,并且也手动调过了。图片见下面的一条评论

明月松间行 2021-12-08 08:29:48

大神,能帮解答下吗?看了RangeAssignor源码以及测试了下,普通的consumer消费没问题,符合预期,多个topic的key一样的也落在同一个client上。但用kafka-streams去消费的时候,就不符合预期了...即使显示指定partition.assignment.strategy这个参数,测试了一个topic20个分区,两个client场景,结果却是一个消费11个一个消费9个

千纸鹤带着心事 2021-12-08 08:02:02

回复
KAFKA STREAM 的我不是很懂鸭 = =

残花月 2021-12-07 17:13:11

kafka会对key取模去进行tp分配,但你是两个topic,partition都不一样,也就是tp顺序不一定相同,造成了这个结果。比如A 的顺序是 123,b的是132,取模都是第二个tp,但实际上不是同一个。 手动分区或许可以解决这个问题,等我肥家看看,或者楼主自己搜搜手动分区相关,或者等其他人回答

泛泛之交 2021-12-07 06:32:06

正文有点错误:想让A和B里的key一样的数据能让同一个client消费到,请问该如何操作呢?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文