kafka reassign partition后, ISR 落后于 Replicas

wlh 发表于: 2018-08-08   最后更新时间: 2018-08-08 16:55:10   6,475 游览

执行 reassign partition命令:

/opt/kafka/bin/kafka-reassign-partitions.sh --zookeeper 10.117.10.194:2181,10.252.223.221:2181,10.117.3.243:2181 --reassignment-json-file p4.json --execute

之后topic状态不正常

[root@prod-mq1 bin]# ./kafka-topics.sh --describe --zookeeper 10.117.10.194:2181,10.252.223.221:2181,10.117.3.243:2181 --topic ods_prod11_5_7
Topic:ods_prod11_5_7    PartitionCount:10       ReplicationFactor:3     Configs:
        Topic: ods_prod11_5_7   Partition: 0    Leader: 1       Replicas: 1,2,3 Isr: 1
        Topic: ods_prod11_5_7   Partition: 1    Leader: 1       Replicas: 1,2,3 Isr: 1
        Topic: ods_prod11_5_7   Partition: 2    Leader: 1       Replicas: 1,2,3 Isr: 1
        Topic: ods_prod11_5_7   Partition: 3    Leader: 1       Replicas: 1,2,3 Isr: 1
        Topic: ods_prod11_5_7   Partition: 4    Leader: 1       Replicas: 1,2,3 Isr: 1
        Topic: ods_prod11_5_7   Partition: 5    Leader: 1       Replicas: 1,2,3 Isr: 1
        Topic: ods_prod11_5_7   Partition: 6    Leader: 1       Replicas: 1,2,3 Isr: 1
        Topic: ods_prod11_5_7   Partition: 7    Leader: 1       Replicas: 1,2,3 Isr: 1
        Topic: ods_prod11_5_7   Partition: 8    Leader: 1       Replicas: 1,2,3 Isr: 1
        Topic: ods_prod11_5_7   Partition: 9    Leader: 1       Replicas: 1,2,3 Isr: 1

Topic 处于 under replicated 状态.

server.log 充满:

  [2018-08-08 16:21:12,773] WARN Received a PartitionLeaderEpoch assignment for an epoch < latestEpoch. This implies messages have arrived out of order. New: {epoch:13, offset:89409682}, Current: {epoch:38, offset84236994} for Partition: prod-rm-bp1p125xw0bvcey34-2 (kafka.server.epoch.LeaderEpochFileCache)

求教大家,如何让topic恢复正常?

发表于 2018-08-08
wlh
添加评论

你分配分区的脚本贴一下。

wlh -> 半兽人 5年前

问题解决了

改变了bootstrap端口到9093.。 停止和producer通信。重启broker。
然后ISR就和 RF 一样了

{"version": 1, "partitions": [{"topic": "ods_prod11_5_7", "partition": 0, "replicas": [1,2,3]}, {"topic": "ods_prod11_5_7", "partition": 1, "replicas": [1,2,3]}, {"topic": "ods_prod11_5_7", "partition": 2, "replicas": [1,2,3]}, {"topic": "ods_prod11_5_7", "partition": 3, "replicas": [1,2,3]}, {"topic": "ods_prod11_5_7", "partition": 4, "replicas": [1,2,3]}, {"topic": "ods_prod11_5_7", "partition": 5, "replicas": [1,2,3]}, {"topic": "ods_prod11_5_7", "partition": 6, "replicas": [1,2,3]}, {"topic": "ods_prod11_5_7", "partition": 7, "replicas": [1,2,3]}, {"topic": "ods_prod11_5_7", "partition": 8, "replicas": [1,2,3]}, {"topic": "ods_prod11_5_7", "partition": 9, "replicas": [1,2,3]}]}

半兽人 -> wlh 5年前

你迁移的时候 还有生产者?

wlh -> 半兽人 5年前

对. 执行脚本 迁移时候, 生产者仍在生产数据.

半兽人 -> wlh 5年前

忽视吧,有新的交易进来,有序打破了。

半兽人 -> wlh 5年前

话说,你的副本太多了,主备就好。

wlh -> 半兽人 5年前

如何忽视?Replicas: 1,2,3 Isr: 1, 意味着 只有一个broker有数据,如果该broker shutdown, 整个partition就不能访问.

如何让ISR 同步为 [1,2,3]?

wlh -> 半兽人 5年前


主备就好 是什么意思?

半兽人 -> wlh 5年前

同步完成后,还是这样吗? 就是2个副本。

半兽人 -> wlh 5年前

当副本落后太多,就不会在isr中了。

wlh -> 半兽人 5年前

1 如何判断副本是否落后leader 太多?

2 如果落后太多, 不在ISR, 如何让副本加入ISR?

谢谢!

wlh -> wlh 5年前

通过检查replication-offset-checkpoint, 我发现 broker2,3的副本已经停止同步了:

cat replication-offset-checkpoint |grep  ods_prod11_5_7
ods_prod11_5_7 6 5101186
ods_prod11_5_7 9 2734089
ods_prod11_5_7 7 6379237
ods_prod11_5_7 0 6006019
ods_prod11_5_7 3 6199149
ods_prod11_5_7 5 3782093
ods_prod11_5_7 8 7968393
ods_prod11_5_7 4 6279389
ods_prod11_5_7 2 5780622
ods_prod11_5_7 1 4235235  <===不再增长

而broker1 上面的文件再不停增长.

半兽人 -> wlh 5年前

只能看日志,没有相关命令确认的,导致没同步有以下3种原因
1、由于io引发的同步慢,导致落后
2、在一定周期时间内follower停止从leader拉取请求。follower replica卡住了是由于GC暂停或follower失效或死亡。
3、当用户给topic增加新的副本时,新的follower不在同步副本列表中,直到他们完全赶上了leader日志。

wlh -> 半兽人 5年前

follower replica卡住了是由于GC暂停或follower失效或死亡:

看了follower GC日志,GC正常

follower失效或死亡: 是否能够从日志判断?
如果是这样,如何恢复follower?

半兽人 -> wlh 5年前

日志没有打异常信息吗?

wlh -> 半兽人 5年前

[2018-08-08 16:21:12,773] WARN Received a PartitionLeaderEpoch assignment for an epoch < latestEpoch. This implies messages have arrived out of order. New: {epoch:13, offset:89409682}, Current: {epoch:38, offset84236994} for Partition: prod-rm-bp1p125xw0bvcey34-2 (kafka.server.epoch.LeaderEpochFileCache)

半兽人 -> wlh 5年前

这是之前的错误吧。。

大帝 -> wlh 4年前

请问这个 warning 该怎么消除呢

你的答案

查看kafka相关的其他问题或提一个您自己的问题