我们可以使用Kafka Streams API顺序处理消息吗?

时间:2018-10-25 13:58:49

标签: apache-kafka apache-kafka-streams

我们需要维护一些消息的顺序。我们已决定将所有消息从特定源发送到分区,以便保持消息的顺序(多个源可以产生相同的分区,但是一个源不能产生多个分区),我们就能识别每个来源及其密钥。

现在,我们需要使用这些消息并进行一些处理。我们对已消耗的消息执行多个独立的操作(例如,将它们存储在数据库中,转发它们等)。 现在,我只能选择使用Kafka Streams API还是Consumer API。

注意:我不能有太多的主题(例如,由于来源众多,因此无法为每个来源创建一个主题)。尽管我可以按密钥对消息进行分组以标识来源,但是对于使用Streams,我想要的是密钥消息的顺序。

用例:我想按顺序将这些消息提交到数据库,并且要按顺序转发这些消息

那么如何使用Streams API按顺序处理消息?

1 个答案:

答案 0 :(得分:1)

  

我们已决定将所有消息从特定来源发送到分区

Kafka保证按单个分区中的顺序(按到达经纪人的顺序),而不按任何其他字段或按时间。所有Kafka客户(消费者,Streams,第三方库)都尊重这一事实。

但是,通常,如果您将消息时间戳记包含在数据库插入事件中,则可以按键,按时间戳记进行分组。不过,这取决于数据库。

如果您已经按已知的源密钥进行分区,为什么不在streams应用程序中仅按此进行过滤?否则,您将必须使用Consumer API,因为它允许您分配特定的分区(Processor API,可能但未使用过)