Kafka Streams应用运行数天报Broker may not be available告警无法自愈咨询
解决方案
内置参数配置(优先推荐)
Kafka Streams 原生提供了异常熔断相关的配置,调整以下参数即可实现故障时自动退出:
- 调整 Streams 核心参数
task.timeout.ms:定义Stream任务无响应的最大容忍时长,超过阈值后会主动抛出异常终止进程,建议根据业务容忍度设置为 600000 ~ 1800000(10~30分钟)max.task.idle.ms:控制任务允许的最大空闲时长,无法拉取数据的时长超过阈值后也会触发异常
- 透传内置客户端参数
可以直接给Kafka Streams配置内嵌生产者、消费者的超时参数,异常会向上传递给Streams进程:- 消费者配置
max.poll.interval.ms:超过该时长无法拉取到消息会被踢出消费组,触发Streams异常流程 - 生产者配置
delivery.timeout.ms:消息发送超时超过阈值后会抛出TimeoutException,触发进程退出
- 消费者配置
版本兼容兜底方案
如果你使用的Kafka Streams版本低于2.8,部分参数支持不完善,可以通过自定义逻辑实现:
- 注册
StreamsUncaughtExceptionHandler,统计连接类异常的出现次数,超过阈值后直接返回SHUTDOWN_CLIENT,让Streams主动关闭 - 自定义健康检查接口,定时判断
KafkaStreams.state()的状态,如果持续10分钟以上处于非RUNNING状态,直接让接口返回失败,触发K8s存活探针重启容器。
额外优化建议
你遇到的这个假死场景大概率是客户端元数据缓存异常导致的,可额外将metadata.max.age.ms调整为300000(5分钟),强制客户端定期刷新Broker元数据,很多时候可以直接避免该故障,不需要走到重启进程的步骤。
内容的提问来源于stack exchange,提问作者Afshin Yavari
相关产品推荐
相关产品推荐

