我们有一个Kafka集群,其中有4个代理和一些主题,副本因子为1,分区为10。在某个时刻,我们有4个服务器中的2个服务器发生了故障。所以现在我们有2个代理和相同的主题。当i m run command ./kafka_topics.sh --zookeeper localhost:2181 --describe i
m得到:
Topic:outcoming-notification-error-topic PartitionCount:10 ReplicationFactor:1 Configs:
Topic: outcoming-error-topic Partition: 0 Leader: 2 Replicas: 2 Isr: 2
Topic: outcoming-error-topic Partition: 1 Leader: 3 Replicas: 3 Isr: 3
Topic: outcoming-error-topic Partition: 2 Leader: 4 Replicas: 4 Isr: 4
Topic: outcoming-error-topic Partition: 3 Leader: 1 Replicas: 1 Isr: 1
Topic: outcoming-error-topic Partition: 4 Leader: 2 Replicas: 2 Isr: 2
Topic: outcoming-error-topic Partition: 5 Leader: 3 Replicas: 3 Isr: 3
Topic: outcoming-error-topic Partition: 6 Leader: 4 Replicas: 4 Isr: 4
Topic: outcoming-error-topic Partition: 7 Leader: 1 Replicas: 1 Isr: 1
Topic: outcoming-error-topic Partition: 8 Leader: 2 Replicas: 2 Isr: 2
Topic: outcoming-error-topic Partition: 9 Leader: 3 Replicas: 3 Isr: 3
我怎么能删除领导人2...4?或者可能是我需要删除此领导人的分区,但如何?
警方...
我们还使用Kafka_exporter来监控kafka与prometheus。在kafka_exporter日志中的2个代理程序关闭后,我们得到以下错误:
level=error msg="Cannot get oldest offset of topic outcoming-error-topic partition 10: kafka server: In the middle of a leadership election, there is currently no leader for this partition and hence it is unavailable for writes." source="kafka_exporter.go:296"
1条答案
按热度按时间9vw9lbht1#
你可以用Kafka的
kafka-reassign-partitions.sh
来做这件事。你有两种方法,一种是生成一个新任务的建议,另一种是手动指定特定分区的领导者。1 .生成建议
第一种方法,如Kafka文献中所述,遵循以下逻辑:
1.1生成建议的分区重新分配配置
首先,你应该创建一个json文件,比如链接中提供的,我们将其命名为
topics.json
。这将告诉Kafka您愿意从哪些主题重新分配分区。在示例中,他希望Kafka为主题
foo1
和foo2
提出建议。使用该json,调用该工具并在命令中设置活动代理列表:
这将输出Kafka的建议,您可以将其保存到另一个.json文件中。例如:
如果你愿意的话,你可以手动修改一些赋值(或者认为这样做是正确的,因为这个工具并不完美)。将json保存到一个文件中,例如
reassign-example.json
,它将在下一步中使用。1.2.执行建议的分区重新分配
让我们让Kafka执行这个提议并移动分区。为此,执行:
这将执行
reassign-example.json
文件中定义的分区移动。2.说明书说明
第二种方法比较简单,但您必须手动识别要重新指派的分割区。例如,如果您要将主题XXX的分割区1移至代理程式5和6,您可以建立json档案(
manual-reassign.json
),如下所示:它的启动方式与前面的方法相同: