我正在开发一个使用 Apache Kafka
的软件。我有一个消费者订阅了多个主题,我想知道是否有从这些主题接收消息的订单。我在计算机上尝试了一些组合,但我需要确定这一点。
示例
- 消费者子主题1和主题2
- Producer1 就 topic1 写一些内容
- Producer2 在 topic2 上写一些内容
- Producer1 就 topic1 写一些内容
- 当消费者轮询时,它会收到一个记录列表,其中首先包含来自他订阅的第一个主题的消息,然后包含来自另一个主题的消息。
我想知道是否总是这样,即消息按照我订阅的主题的顺序排列。 谢谢
[编辑]我想指定我有两个主题,每个主题有一个分区,并且只有一个生产者和一个消费者。我需要首先读取第一个主题的所有消息,然后读取另一个主题的消息
最佳答案
Kafka 只保证分区内消息的排序。这意味着即使只有一个主题但有多个分区,您也无法保证消息的接收顺序与发送顺序相同。
关于两个主题的用例,主题的订阅顺序和消息排序之间没有关系,即使集群有多个节点,主题分区领导者将位于不同的代理上,并且客户端通过不同的代理接收消息连接。顺便说一句,即使只有一个代理拥有所有主题/分区,您也无法获得您所描述的保证。
关于java - 来自多个主题 Kafka 的消息顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44567524/