![](/img/trans.png)
[英]Failed Kafka topic message listening repeatedly by listener in spring Kafka
[英]Kafka listener isn't listening to Kafka
我正在使用 Java 11 和 kafka-client 2.0.0。
我正在使用以下代码生成消费者:
public Consumer createConsumer(Properties properties,String regex) {
log.info("Creating consumer and listener..");
Consumer consumer = new KafkaConsumer<>(properties);
ConsumerRebalanceListener listener = new ConsumerRebalanceListener() {
@Override
public void onPartitionsRevoked(Collection<TopicPartition> partitions) {
log.info("The following partitions were revoked from consumer : {}", Arrays.toString(partitions.toArray()));
}
@Override
public void onPartitionsAssigned(Collection<TopicPartition> partitions) {
log.info("The following partitions were assigned to consumer : {}", Arrays.toString(partitions.toArray()));
}
};
consumer.subscribe(Pattern.compile(regex), listener);
log.info("consumer subscribed");
return consumer;
}
}
我的轮询循环在代码中的不同位置:
public <K, V> void startWorking(Consumer<K, V> consumer) {
try {
while (true) {
ConsumerRecords<K, V> records = consumer.poll(600);
if (records.count() > 0) {
log.info("Polled {} records", records.count());
} else {
log.info("polled 0 records.. going to sleep..");
Thread.sleep(200);
}
}
} catch (WakeupException | InterruptedException e) {
log.error("Consumer is shutting down", e);
} finally {
consumer.close();
}
}
当我运行代码并使用此 function 时,会创建使用者并且日志包含以下消息:
Creating consumer and listener..
consumer subscribed
polled 0 records.. going to sleep..
polled 0 records.. going to sleep..
polled 0 records.. going to sleep..
该日志不包含有关分区分配/撤销的任何信息。
此外,我可以在日志中看到消费者使用的属性(设置了 group.id):
2020-07-09 14:31:07.959 DEBUG 7342 --- [ main] o.a.k.clients.consumer.ConsumerConfig : ConsumerConfig values:
auto.commit.interval.ms = 5000
auto.offset.reset = latest
bootstrap.servers = [server1:9092]
check.crcs = true
client.id =
group.id=mygroupid
key.deserializer=..
value.deserializer=..
因此,我尝试使用具有相同配置的 kafka-console-consumer 来使用 regex(mytopic.*) 应该捕获的主题之一(在这种情况下,我使用了主题 mytopic-1):
/usr/bin/kafka-console-consumer.sh --bootstrap-server server1:9092 --topic mytopic-1 --property print.timestamp=true --consumer.config /data/scripts/kafka-consumer.properties --from-begining
我的代码的其他部分有一个轮询循环,每 10m 超时一次。所以底线 - 问题是分区没有分配给 Java 消费者。 侦听器内部的打印永远不会发生,并且消费者没有任何分区可以侦听。
似乎我的属性文件中缺少 ssl 属性。 如果您使用ssl
,请不要忘记指定security.protocol=ssl
。 如果 Kafka 使用ssl
并且您尝试在未配置ssl
参数的情况下访问它,则 kafka-client API 似乎不会引发异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.