Kafka Streams错误-分区上的偏移提交失败,请求超时

时间:2018-06-28 17:38:37

标签: java apache-kafka apache-kafka-streams

我们使用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

1 个答案:

答案 0 :(得分:0)

好像您对Kafka集群有问题,并且Kafka使用者在尝试提交偏移量时超时。 您可以尝试为Kafka使用者增加与连接相关的配置

  1. request.timeout.ms (默认为305000ms)
  

该配置控制客户端将花费的最长时间   等待请求的响应

  1. connections.max.idle.ms (默认为540000ms)
  

在指定的毫秒数后关闭空闲连接   此配置。