我正在写一个kafka生产者,需要帮助来创建分区。 我有一个组和一个用户表。群组包含不同的用户,一次用户只能成为一个群组的一部分。
我将收到两种类型的事件作为输入,并根据这些事件将它们添加到Kafka。
每当与某个组相关的事件发生时,该组中的所有用户都必须在消费者端批量更新。 每当与用户相关的事件发生时,都必须在消费者端照此执行。
此外,我想保持时间顺序。
如果我创建用户级分区,则在用户端将无法进行批量更新。
如果我创建组级别分区,则不会发生用户事件的并行更新。
我正在尝试找出可以在这里尝试的可能性。
答案 0 :(得分:0)
此外,我想保持时间顺序。
意味着主题(无论有多少个)不能有一个以上的分区,因为您可能会乱序接收消息。
很明显,除非您在消息中实现序列ID之类的东西(并且可以在多个生产者之间共享该序列)。
如果我创建用户级分区,则在用户端将无法进行批量更新。
如果我创建组级别分区,则不会发生用户事件的并行更新。
这听起来像是一个非常简单的消息传递设计,其中您有一个队列(实际上是由具有单个分区的单个主题支持的)被多个用户使用。实际上,任何发布订阅消息传递技术在这里都足够了(例如RabbitMQ的扇出交换)。
队列中的消息包含DATEADD(millisecond, {interval as milliseconds}, {some datetime})
或group updates
的信息-使用者然后根据他们感兴趣的内容过滤输入。
要讨论另一种选择:user updates
的单个队列,group updates
的另一个队列-我知道由于订单需求而不够-可以独立获得user updates
的group update
中,则破坏了顺序。
答案 1 :(得分:0)
从kafka文档中: https://kafka.apache.org/documentation/#intro_consumers
Kafka仅提供分区中记录的总顺序,而不提供 在一个主题的不同分区之间。按分区排序 结合按键对数据进行分区的功能足以满足 大多数应用。但是,如果您需要总订单记录 这可以通过只有一个分区的主题来实现 这将意味着每个消费者组只有一个消费者流程。
所以最好的办法是只有一个分区单个主题。