KafkaConsumer不轮询所有消息

时间:2019-11-13 06:04:41

标签: spring-boot spring-cloud-stream spring-cloud-stream-binder-kafka

我有一个类似于以下代码的代码:

KafkaConsumer<Long, String> kafkaConsumer = new KafkaConsumer<>(properties);
partitions = Collections.singletonList(new TopicPartition(topic, partition));
kafkaConsumer.assign(partitions);
kafkaConsumer.seekToBeginning(List.of(partition));

ConsumerRecords<Long, String> records = kafkaConsumer.poll(Duration.ofMillis(pollDuration));

在运行代码时,我无法获取此特定主题中的所有消息。 例如,如果我在该分区中有24条记录,那么我只能获得20条记录。

此问题并非总是会发生。当我们在运行我的应用程序的同一台计算机上使用docker设置Kafka(wurstmeister / kafka:1.1.0)时,我能够从该特定分区获取所有记录。

但是当我在另一台机器上制作相同的docker-compose并连接到它时,就会发生此问题。

1 个答案:

答案 0 :(得分:0)

尝试增加fetch.min.bytes,甚至可能增加fetch.max.wait.ms

  

fetch.min.bytes   服务器为获取请求应返回的最小数据量。如果没有足够的数据,则请求将等待该数据积累,然后再回答请求。默认设置为1字节,这意味着只要有一个字节的数据可用,或者提取请求超时等待数据到达,就将对提取请求进行应答。将此值设置为大于1的值将导致服务器等待大量数据累积,从而可以以一些额外的延迟为代价提高服务器吞吐量。

     

fetch.max.wait.ms   如果没有足够的数据立即满足fetch.min.bytes给出的要求,服务器将在回答提取请求之前阻塞的最长时间。