Skip to content

Leader Not Available

Leader Parition Error

txt
[Producer ] Could not connect to leader for partition CodeWallEEvent/1: Kafka::LeaderNotAvailable

Describe Topic Stat

bash
kafka-topics.sh --bootstrap-server localhost:9092 --describe --topic CodeWallEEvent
txt
Topic: CodeWallEEvent   TopicId: YAJq9X4eQ3uuLmJpK-X4YA PartitionCount: 3       ReplicationFactor: 1    Configs: max.message.bytes=20971520
        Topic: CodeWallEEvent   Partition: 0    Leader: 0       Replicas: 0     Isr: 0
        Topic: CodeWallEEvent   Partition: 1    Leader: none    Replicas: 100   Isr: 100
        Topic: CodeWallEEvent   Partition: 2    Leader: 0       Replicas: 0     Isr: 0
字段含义说明
PartitionKafka 分区编号(从 0 开始)是 Partition ID
Leader当前该分区的主控 brokerBroker ID
Replicas所有副本所在的 broker 列表Broker ID 列表
Isr当前同步完成的副本 broker 列表Broker ID 列表

Partition 1 is invalid: Leader: none and Broker ID: 100.

Delete Topic

bash
kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic foo

Delete Topics with Prefix

With foo_ prefix.

bash
kafka-topics.sh --bootstrap-server localhost:9092 --list | grep '^foo_' | xargs -I{} kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic {}

Create Topic

Create topic foo with 3 partition and 1 replicas.

bash
kafka-topics.sh --create \
  --topic foo \
  --bootstrap-server localhost:9092 \
  --partitions 3 \
  --replication-factor 1

Delete PVC

If all topic can be deleted, just delete the pvc.

bash
kubectl scale sts xxx --replicas=0
bash
kubectl delete pvc xxx

What is ISR

ISR 的全称是 In-Sync Replicas,意思是"同步中的副本"。 它是指与 Leader 副本保持同步的所有副本列表。 也就是说,这些副本都紧跟 Leader 的数据进度,延迟在 Kafka 容忍范围之内(由 replica.lag.time.max.ms 控制,默认 10 秒)。

功能

  • Kafka 只能从 ISR 列表中的 Leader 处理写入,防止丢数据。
  • Kafka 在 ack=all 模式下,消息只有在 ISR 中的所有副本都确认写入后,才返回确认给生产者。
  • 如果某个 Follower 长时间落后于 Leader,Kafka 会将其 移出 ISR,不再认为它是"安全副本"。

例子

假设:

  • replication.factor=3
  • min.insync.replicas=2
  • Producer 设置 acks=all

那么:

  • 写入操作只会在 ISR ≥ 2 时才成功(即至少两个副本同步写入)。
  • 如果 ISR 只剩下 Leader 自己(比如其他副本宕机或太慢),写入将失败。

Partition and Broker

Kafka 的 分区(partition) 和 broker(节点) 的关系非常关键,它们共同影响 Kafka 的 吞吐性能、可扩展性和高可用性。

维度说明
每个分区只能由一个 broker 作为 leader所以分区数应 ≥ broker 数,才能充分利用 broker
一个 broker 可以拥有多个分区Kafka 不限制每个 broker 的分区数量,但太多分区会带来管理负担
分区决定并发度越多分区,消费者并行处理能力越强,但也带来 overhead
副本复制要依赖多个 broker若 replication-factor > 1,需要至少多个 broker 才能工作

Scale Down Broker

当你从多节点 Kafka 集群“缩容成一个 broker”,必须谨慎操作,否则会出现数据丢失、服务中断甚至 Kafka 启动失败的问题。

假设当前:

  • 你有多个 broker(如 broker-0, broker-1, broker-2)
  • 每个 topic 的 partition 和 replica 分布在不同节点
  • 你想缩容为 只有 broker-0 一个节点

操作步骤

  • 调整 replication.factor = 1
  • 使用 kafka-reassign-partitions 重新分配副本到 broker-0
  • 确认副本分配情况
  • 逐步关闭 broker-1broker-2