我们能给多个kafka分区重新发送消息吗

plupiseo  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(297)

我有一个有状态的应用程序,它维护与用户的会话。此应用程序有5个示例。
以下是主题:
所有主题都有5个分区。 topic1 topic2 topic3 topic1和topic2分别用于构建状态存储和全局ktable。两个主题都使用用户名作为消息键。这些主题中的数据由应用程序示例本身生成。
现在,另一个应用程序使用与消息键相同的用户名向topic3生成数据。
我的期望是,它将被本地状态存储中有该用户的示例使用的同一分区所占用。是这样吗?
对于每条消息,也应该由拥有此用户会话的其他示例来处理。那么,如果示例找到其他示例侦听的分区并将消息转发给其他分区,那么这种设计是否正确呢?
这种设计是可伸缩的,还是最好将所有消息广播到所有分区(diff consumer group)并由示例决定是否处理它

gzszwxb4

gzszwxb41#

我不知道你是否真的需要发送数据到多个分区。。。
如果您有一个globalktable(或全局存储),那么每个示例都将读取所有主题分区,从而在本地实现数据的完整副本(因此,如果确实使用交互式查询,则不会进行远程调用,因为所有数据都是本地的。)
因此,您只剩下两个(常规)输入主题。
kafka流中的分区分配不同于常规使用者的分区分配。在您的情况下,每个主题有5个分区,将创建5个任务,每个任务将从一个输入主题中读取一个分区,例如,任务-0将读取t1-p0和t3-p0,任务-1将读取t1-p1和t3-p1,等等。因此,如果您的输入数据按“用户名”进行分区,则单个用户的所有数据将由同一个任务处理。

相关问题