繁体   English   中英

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

[英]Kafka Streams error - Offset commit failed on partition, request timed out

我们使用 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 ,但在相同用例的先前kafka-clients版本中(消费者上的Errors.REQUEST_TIMED_OUT )类似消息( Offset commit for group {} failed: {} )的记录与debug水平。 对我而言,将日志级别更新为针对此类用例的警告会更合乎逻辑。

如何解决这个问题? 根本原因可能是什么? 也许更改消费者属性或分区设置可以帮助摆脱此类问题。

我们使用以下实现来创建 Kafka Streams:

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 消费者设置:

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 代理版本: kafka_2.11-0.11.0.2 Kafka Streams 的两个版本都发生错误: 1.0.11.1.0

看起来您对 Kafka 集群有问题,并且 Kafka 消费者在尝试提交偏移量时超时。 您可以尝试为 Kafka 消费者增加连接相关的配置

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM