我使用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中找不到任何关于此属性的具体内容。
答案 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