Kafka Broker上报进程异常,日志提示“IllegalArgumentException”
问题背景与现象
使用Manager提示进程故障告警,查看告警进程为Kafka Broker。
可能原因
Broker配置异常。
原因分析
- 在Manager页面,在告警页面得到主机信息。
- 通过SSH登录Kafka Broker,执行cd /var/log/Bigdata/kafka/broker命令进入日志目录。
查看server.log发现如下日志抛出IllegalArgumentException异常,提示java.lang.IllegalArgumentException: requirement failed: replica.fetch.max.bytes should be equal or greater than message.max.bytes。
2017-01-25 09:09:14,930 | FATAL | [main] | | kafka.Kafka$ (Logging.scala:113) java.lang.IllegalArgumentException: requirement failed: replica.fetch.max.bytes should be equal or greater than message.max.bytes at scala.Predef$.require(Predef.scala:233) at kafka.server.KafkaConfig.validateValues(KafkaConfig.scala:959) at kafka.server.KafkaConfig.<init>(KafkaConfig.scala:944) at kafka.server.KafkaConfig$.fromProps(KafkaConfig.scala:701) at kafka.server.KafkaConfig$.fromProps(KafkaConfig.scala:698) at kafka.server.KafkaServerStartable$.fromProps(KafkaServerStartable.scala:28) at kafka.Kafka$.main(Kafka.scala:60) at kafka.Kafka.main(Kafka.scala)
Kafka要求replica.fetch.max.bytes需要大于等于message.max.bytes。
- 进入Kafka配置页面,选择“全部配置”, 显示所有Kafka相关配置,分别搜索message.max.bytes、
replica.fetch.max.bytes进行检索,发现replica.fetch.max.bytes小于message.max.bytes。
解决办法
- 登录Manager界面,进入Kafka配置页面。
- MRS 3.x之前的版本:登录MRS Manager,选择“服务管理 > Kafka > 配置 > 全部配置”。
- MRS 3.x及后续版本,登录FusionInsight Manager,选择“集群 > 服务 > Kafka > 配置 > 全部配置”。
- 搜索并修改replica.fetch.max.bytes参数,使得replica.fetch.max.bytes的值大于等于message.max.bytes,使得不同Broker上的Partition的Replica可以同步到全部消息。
- 保存配置,查看集群是否存在配置过期的服务,如果存在,需重启对应服务或角色实例使配置生效。
- 修改消费者业务应用中fetch.message.max.bytes,使得fetch.message.max.bytes的值大于等于message.max.bytes,确保消费者可以消费到全部消息。