我正在开发使用Apache Kafka
的软件。我有一个订阅了多个主题的消费者,我想知道是否有接收来自这些主题的消息的订单。我在计算机上尝试了一些组合,但我需要确定这一点。
实施例
我想知道它是否总是这样,即消息的顺序与我订阅的主题一样。 感谢
[编辑]我想指定我有两个主题,每个主题有一个分区,只有一个生产者和一个消费者。我需要首先阅读第一个主题的所有消息,然后阅读来自其他主题的消息
答案 0 :(得分:2)
Kafka只为您提供在分区内订购消息的保证。这意味着即使只有一个主题但有多个分区,您也无法保证按照发送的顺序接收消息。
关于具有两个主题的用例,主题的订阅顺序与订阅消息之间没有关系,即使因为如果群集有多个节点,主题分区领导者将在不同的代理上,并且客户端会收到不同的消息连接。顺便说一句,即使只有一个经纪人拥有所有主题/分区,您也无法获得所描述的保证。
答案 1 :(得分:0)
没有。消息排序仅保留在分区中(甚至不在主题内)。
如果您需要更强的排序保证,则必须在应用程序中重新排列消息,例如使用时间戳(以及足够大的窗口缓冲区来捕获所有无序到达的消息)。最近Kafka本身为所有消息添加了时间戳,对此的支持有所改善,但原则仍然相同。
答案 2 :(得分:0)
为什么不首先订阅第一个主题并进行投票,然后订阅另一个主题并进行另一次投票?如果没有这个,我不认为您可以保证从这两个主题接收消息的顺序。