从卡夫卡投票时是否保证记录顺序?

时间:2018-01-17 12:34:50

标签: java apache-kafka

我使用Apache Kafka客户端来轮询Kafka的记录。

让我们说我做的事情如下:

org.apache.kafka.clients.consumer.Consumer consumer = ...
...
ConsumerRecords<String, String> consumerRecords = consumer.poll(...);
List<ConsumerRecord<String, String>> records = consumerRecords.records(partition);

我的问题:records是按照自然顺序返回的吗?更具体地说,它们是offset列表中的records订购的吗?

我在JavaDoc中找不到任何关于此属性的具体内容。

2 个答案:

答案 0 :(得分:1)

轮询意味着记录以异步方式返回。除了处理订单的顺序外,您不能保证任何订单。

如果您需要对List进行排序,则可以使用您希望在流完成后对其进行排序的任何Comparable函数。

答案 1 :(得分:1)

查看源代码,似乎是,保留了分区内记录的顺序。记录存储在ArrayList中,并使用偏移https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/clients/consumer/internals/Fetcher.java

获取

另见Apache Kafka order of messages with multiple partitions

的答案