我使用spring Kafka来消费LinkedIn large message supported Kafka client
生成的消息鉴于此Kafka客户端始终将AUTO_OFFSET_RESET_CONFIG
覆盖为无,如其构造函数中所示。
private LiKafkaConsumerImpl(LiKafkaConsumerConfig configs,
Deserializer<K> keyDeserializer,
Deserializer<V> valueDeserializer,
Deserializer<LargeMessageSegment> largeMessageSegmentDeserializer,
Auditor<K, V> consumerAuditor) {
_kafkaConsumer = new KafkaConsumer<>(configs.configForVanillaConsumer(),
byteArrayDeserializer,
byteArrayDeserializer);
}
Map<String, Object> configForVanillaConsumer() {
Map<String, Object> newConfigs = new HashMap<>();
newConfigs.putAll(this.originals());
newConfigs.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, false);
newConfigs.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "none");
return newConfigs;
}
因此,一旦我开始使用批量提交并将ENABLE_AUTO_COMMIT_CONFIG
设置为false,就会抛出以下错误:
[org.springframework.kafka.KafkaListenerEndpointContainer#0-1-C-1] ERROR oakcciConsumerCoordinator - 用户提供的侦听器com.linkedin.kafka.clients.consumer.LiKafkaConsumerRebalanceListener for group document-event-consumer在分区分配org上失败.apache.kafka.clients.consumer.NoOffsetForPartitionException:未定义的偏移量,没有分区的重置策略:DocumentEvents-2 在org.apache.kafka.clients.consumer.internals.Fetcher.resetOffset(Fetcher.java:369) 在org.apache.kafka.clients.consumer.internals.Fetcher.updateFetchPositions(Fetcher.java:247) 在org.apache.kafka.clients.consumer.KafkaConsumer.updateFetchPositions(KafkaConsumer.java:1602) 在org.apache.kafka.clients.consumer.KafkaConsumer.position(KafkaConsumer.java:1265) 在com.linkedin.kafka.clients.consumer.LiKafkaConsumerImpl.position(LiKafkaConsumerImpl.java:403) 在org.springframework.kafka.listener.KafkaMessageListenerContainer $ ListenerConsumer $ 1.onPartitionsAssigned(KafkaMessageListenerContainer.java:447) 在com.linkedin.kafka.clients.consumer.LiKafkaConsumerRebalanceListener.onPartitionsAssigned(LiKafkaConsumerRebalanceListener.java:62) 在org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.onJoinComplete(ConsumerCoordinator.java:255) 在org.apache.kafka.clients.consumer.internals.AbstractCoordinator.joinGroupIfNeeded(AbstractCoordinator.java:339) 在org.apache.kafka.clients.consumer.internals.AbstractCoordinator.ensureActiveGroup(AbstractCoordinator.java:303) 在org.apache.kafka.clients.consumer.internals.ConsumerCoordinator.poll(ConsumerCoordinator.java:286) 在org.apache.kafka.clients.consumer.KafkaConsumer.pollOnce(KafkaConsumer.java:1030) 在org.apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.java:995) 在com.linkedin.kafka.clients.consumer.LiKafkaConsumerImpl.poll(LiKafkaConsumerImpl.java:231) 在org.springframework.kafka.listener.KafkaMessageListenerContainer $ ListenerConsumer.run(KafkaMessageListenerContainer.java:558) at java.util.concurrent.Executors $ RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) 在java.lang.Thread.run(Thread.java:745)
发生此问题的原因是此使用者群体第一次使用此主题的消息,因此它尝试使用偏移重置策略。
虽然我把它设置为&#34;最早的&#34;但它被覆盖到&#34;无&#34;由底层的LinkedIn kafka客户端
我还尝试覆盖 ConsumerRebalanceListener 以手动搜索到这种情况的开头,但实际上它还没有达到这一点。
我该如何解决这个问题?
答案 0 :(得分:0)
有趣;请在GitHub中打开一个问题。
如果政策为none
,我们应该抓住该例外。
与此同时,您可以通过使用常规客户端一次来解决它,实际设置组的初始偏移量(您不必实际接收任何消息,只需获取分配的分区并设置组的初始位置。