Kafka 消息不能接收的问题

问题现象

应用系统上做了一个操作后,后续操作未执行。 操作之间的衔接是通过kafka消息来通讯的

问题排查

可能原因猜测: 1. 消费类挂掉了,没有监听? 2. kafka故障?

  1. 看下消费类所在的应用,发现有异常挂掉了。
    问题在此,重启解决之。启动日志看到消费类正常建立监听的信息。
    手工推送一个消息,还是未收到。

  2. kafka自己启动了一个consumer来进行消息消费
    手工推送一个消息,没有消费掉

./kafka-console-consumer.sh --zookeeper 127.0.0.1:2181 --from-beginning --topic DATA_SEND_SendContractGoods_sit

此时怀疑kafka有问题,但不是很确定,因为集群中部署了三个kafka应用,不可能同时出现故障

  1. 自己手工建立了一个test topic,创建、消费消息,正常
./kafka-console-consumer.sh --zookeeper 192.168.6.33:2181 --from-beginning --topic test_ax

此时比较困惑了,kafka正常 or 异常

  1. 此时误打误撞,看了下topic的信息
Topic:DATA_SEND_SendContractGoods_sit	PartitionCount:1	ReplicationFactor:1	Configs:
	Topic: DATA_SEND_SendContractGoods_sit	Partition: 0	Leader: -1	Replicas: 1	Isr: 
Topic:EFFECTIVE_COST_SIT	PartitionCount:1	ReplicationFactor:1	Configs:
	Topic: EFFECTIVE_COST_SIT	Partition: 0	Leader: 2	Replicas: 2	Isr: 2

Leader:-1,看着这个觉得不对劲,百度下,Leader 为-1的情况:

1.broker shutdown的时候,partition的leader在此broker上,controller选主没有成功,移除此broker后,对应的partition的leader就被赋值成-1了。
2.给此broker发送stopReplicaRequest
调用controller.removeReplicaFromIsr,从zk读取当前partition的状态,从isr中移除此broker,并更新zk信息(如果leader为此broker,则新leader被置为-1,代表没有leader,为什么没有选择isr中其他broker为leader?)
发送leaderAndIsrRequest到此partition的leader,发送updateMetaRequest给所有broker
更新ReplicaStateMachine中replicaState的状态。

比对看了下建立的测试的topic, Leader是3,故能正常消费

Topic:test_ax	PartitionCount:1	ReplicationFactor:1	Configs:
	Topic: test_ax	Partition: 0	Leader: 3	Replicas: 3	Isr: 3

将三台kafka重启后,通讯正常

问题原因:
公司部署的kafka有三台机器组成了一个集群,这个topic只建立了一个分区, 对应分区挂掉后,leader变成了-1,无法进行消息处理? 重启这台机器后也不行?
据运维同事反应,早上有一台kafka挂掉了,然后重启了。

待验证的猜想: kafka集群中,某个topic只有一个分区,对应分区机器挂掉后重启,Leader仍无法恢复?
自己本机验证的时候,创建topic只有一个分区,对应leader的kafka关掉后,消息发送异常,leader为-1, 再启动此kafka,其他的kafka不重启,消息可以正常通讯

解决思路

修改默认topic创建的分区数,可以是集群机器的整数倍。
对已有topic调整。 1:重新部署kafka,修改配置。 此时原有消息内容全部丢失; 2:针对具体topic来修改分区数

参考资料
http://blog.csdn.net/lizhitao/article/details/45380811
http://blog.csdn.net/lizhitao/article/category/2194509

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值