我们使用Kafka Streams来消费,处理和生成消息,而在PROD env上,我们面临着多个主题的错误:
ERROR org.apache.kafka.clients.consumer.internals.ConsumerCoordinator - [Consumer clientId=app-xxx-StreamThread-3-consumer, groupId=app]
Offset commit failed on partition xxx-1 at offset 13920:
The request timed out.[]
对于负载较小的主题,这些错误很少发生,但是对于负载较高(和峰值)的主题,每个主题每天都会发生数十次错误。主题有多个分区(例如10个)。似乎此问题不会影响数据处理(尽管性能),因为在引发异常(即使对于相同的偏移量可能是多个错误)之后,使用者稍后重新读取消息并成功处理它。
我看到由于PR,此错误消息出现在kafka-clients
版本1.0.0
中,但在相同用例({{1}消费者)上以kafka-clients
级记录了类似消息(Errors.REQUEST_TIMED_OUT
)。
对于我来说,将日志级别更新为这种用例的警告会更合乎逻辑。
如何解决此问题?可能是根本原因?也许更改使用者属性或分区设置可以帮助消除此类问题。
我们使用以下实现来创建Kafka流:
Offset commit for group {} failed: {}
我们的Kafka用户设置:
debug
kafka代理版本:StreamsBuilder builder = new StreamsBuilder();
KStream<String, String> stream = builder.<String, String>stream(topicName);
stream.foreach((key, value) -> processMessage(key, value));
Topology topology = builder.build();
StreamsConfig streamsConfig = new StreamsConfig(consumerSettings);
new KafkaStreams(streamsTopology, streamsConfig);
。
两种版本的Kafka Streams均发生错误:bootstrap.servers: xxx1:9092,xxx2:9092,...,xxx5:9092
application.id: app
state.dir: /tmp/kafka-streams/xxx
commit.interval.ms: 5000 # also I tried default value 30000
key.serde: org.apache.kafka.common.serialization.Serdes$StringSerde
value.serde: org.apache.kafka.common.serialization.Serdes$StringSerde
timestamp.extractor: org.apache.kafka.streams.processor.WallclockTimestampExtractor
和kafka_2.11-0.11.0.2
。
答案 0 :(得分:0)
好像您对Kafka集群有问题,并且Kafka使用者在尝试提交偏移量时超时。 您可以尝试为Kafka使用者增加与连接相关的配置
该配置控制客户端将花费的最长时间 等待请求的响应
在指定的毫秒数后关闭空闲连接 此配置。