kafka streams 如何让多个topic里相同的key数据被分配到同一个task
使用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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
回答二楼的,这个是我的两个topic的分区情况,下面的图是通过kafkamanger看到的实际消费的情况
两个topic的分区数一样的,并且也手动调过了。图片见下面的一条评论
大神,能帮解答下吗?看了RangeAssignor源码以及测试了下,普通的consumer消费没问题,符合预期,多个topic的key一样的也落在同一个client上。但用kafka-streams去消费的时候,就不符合预期了...即使显示指定partition.assignment.strategy这个参数,测试了一个topic20个分区,两个client场景,结果却是一个消费11个一个消费9个
回复
KAFKA STREAM 的我不是很懂鸭 = =
kafka会对key取模去进行tp分配,但你是两个topic,partition都不一样,也就是tp顺序不一定相同,造成了这个结果。比如A 的顺序是 123,b的是132,取模都是第二个tp,但实际上不是同一个。 手动分区或许可以解决这个问题,等我肥家看看,或者楼主自己搜搜手动分区相关,或者等其他人回答
正文有点错误:想让A和B里的key一样的数据能让同一个client消费到,请问该如何操作呢?