我遇到以下问题:
我正在接收生产者发出的延迟消息(时间长达一分钟)。我无法控制制作人,因此我想确保一切正常进行。
我正在使用kafka-client
版本0.11.0.0。版本更改是可能的,但很乏味,因此我想避免尽可能多地更改版本。
我的使用者配置如下:
group.id= unique-group-d
bootstrap.servers = # kafka broker with version 0.11.0.0
auto.offset.reset = latest
# avoid client id collision with Kafka
client.id= some-example-gateway-client
我正在轮询这样的消息:
ConsumerRecords<String, String> tConsumerRecords = tempConsumer.poll(1000);
tempMessage.forEach(entry -> {
[...]
});
没有100%与客户端或组ID发生名称冲突。我订阅的主题只有1个分区。
我怀疑生产者的负担很重,该生产者开始生产带有零星消息的独立环境。
它的星期五和每个人都已经走了无济于事。
我错过了什么吗?我可以把责任推到生产者那边吗?
答案 0 :(得分:0)
从Kafka v0.10开始,每条消息都包含一个元数据时间戳属性,该属性可以由生产者在消息创建时设置,也可以由代理在消息插入时设置。
有org.apache.kafka.streams.processor.TimestampExtractor
提供了一个接口,它有一个方法extract
从记录中提取时间戳。
基本上,您只需要比较生产者端和消费者端的时间戳,以确保消息是从生产者端还是消费者端延迟的。
来源: https://kafka.apache.org/10/javadoc/org/apache/kafka/streams/processor/TimestampExtractor.html