[英]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.1
和1.1.0
。
看起来您对 Kafka 集群有问题,并且 Kafka 消费者在尝试提交偏移量时超时。 您可以尝试为 Kafka 消费者增加连接相关的配置
配置控制客户端等待请求响应的最长时间
在此配置指定的毫秒数后关闭空闲连接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.