版本信息
KAFKA-1.0.2(公司版本较老)
问题背景
KAFKA集群24台机器,其中一台BrokerID为8
的机器因网络问题导致在其机器上的Partition同步和消费都非常缓慢,准备减容。下文中称此机器为"异常机器"
。
对于生产环境某Topic共2000多Partition,消费者组中24个Borker,其中有96个Partition位于异常机器上,每个Partition消费积压LAG达到1800万,同时回滚参数设置为100G/2
天,导致每天有10亿数据被回滚。
查看Topic详细信息,副本数为2。异常机器上Partition的副本除Leader外均不在ISR中,且其他机器上Partition副本有异常机器的话,ISR中均无异常机器ID。
合理判断是异常机器网络问题或其他硬件问题导致,查看网络延迟高达1000ms,准备减容。
减容步骤:分区迁移,关闭异常机器上KAFKA服务,重启集群。
问题详情
因异常机器网络问题,分区迁移缓慢。使用kafka-reassign-partitions.sh迁移了24小时还没成功,只好直接进行下一步关闭服务。
关闭服务后查看Topicn情况,异常机器上96个Partition的Leader全都变为-1,副本数为4,ISR为空。
为了尽可能避免数据丢失,对这96个Partition的所有副本开启脏主选举,使其选举出新的Leader对积压数据进行消费。
执行步骤:所有副本所在broker上配置开启脏主选举,并重启集群。
执行后查看Topic信息,所有Partition均为2副本,ISR正常。
此时关闭脏主选举,并重启集群,执行后查看Topic信息,大量Partition的Leader全为-1,副本数为2,ISR为空。
疑问
1、为什么分区迁移后其他成功迁移分区副本仍然为2,但异常机器上未迁移成功的分区副本变成了4?
2、开启脏主选举出新Leader后,为什么关闭脏主,Leader会变成-1?
3、关闭脏主后,除之前异常机器上96个分区外,还有其他分区的Leader也变成了-1
,ISR为空?
1、你中途停了,加上新迁移的,就变成了4个了。
2、如果已经切换Leader结束之后,脏主停不停,理论上是不会变成
-1
的。3、看看系统日志,是否有什么超时相关的信息。
因为我看不到你集群的全貌,所以,我也很难帮你判断。
但是,我猜测一下吧,迁移会产生大量的流量,而干扰了现有的集群,导致变为了
-1
。参考:kafka在数据迁移期间限制带宽的使用
感谢大佬的解答。
关于第一个疑问清楚了。关于2、3当时为了使数据丢失少一些,发现这种情况后立即做出决定,开启脏主直到积压消费到可接受程度。现在仔细复盘当时情况,可能是因为KAFKA集群有一些broker还在启动中,所以查看topic情况会有-1的情况,同时复盘发现当时还有ISR为单个的情况,也印证了broker在启动中的猜想。
你的答案