我们需要维护一些消息的顺序。我们已决定将所有消息从特定源发送到分区,以便保持消息的顺序(多个源可以产生相同的分区,但是一个源不能产生多个分区),我们就能识别每个来源及其密钥。
现在,我们需要使用这些消息并进行一些处理。我们对已消耗的消息执行多个独立的操作(例如,将它们存储在数据库中,转发它们等)。 现在,我只能选择使用Kafka Streams API还是Consumer API。
注意:我不能有太多的主题(例如,由于来源众多,因此无法为每个来源创建一个主题)。尽管我可以按密钥对消息进行分组以标识来源,但是对于使用Streams,我想要的是密钥消息的顺序。
用例:我想按顺序将这些消息提交到数据库,并且要按顺序转发这些消息 。
那么如何使用Streams API按顺序处理消息?
答案 0 :(得分:1)
我们已决定将所有消息从特定来源发送到分区
Kafka保证按单个分区中的顺序(按到达经纪人的顺序),而不按任何其他字段或按时间。所有Kafka客户(消费者,Streams,第三方库)都尊重这一事实。
但是,通常,如果您将消息时间戳记包含在数据库插入事件中,则可以按键,按时间戳记进行分组。不过,这取决于数据库。
如果您已经按已知的源密钥进行分区,为什么不在streams应用程序中仅按此进行过滤?否则,您将必须使用Consumer API,因为它允许您分配特定的分区(Processor API,可能但未使用过)