kafka的partition 的高可用副本机制

partition 的高可用副本机制

我们已经知道Kafka的每个topic都可以分为多个Partition,并且多个 partition 会均匀分布在集群的各个节点下。虽然这种方式能够有效的对数据进行分片,但是对于每个partition 来说,都是单点的,当其中一个 partition 不可用的时候,那么这部分消息就没办法消费。所以 kafka 为了提高 partition 的可靠性而提供了副本的概念(Replica),通过副本机制来实现冗余备份。

每个分区可以有多个副本,并且在副本集合中会存在一个leader 的副本,所有的读写请求都是由 leader 副本来进行处理。剩余的其他副本都做为 follower 副本,follower 副本 会 从 leader 副 本 同 步 消 息 日 志 。 这 个 有 点 类 似zookeeper 中 leader 和 follower 的概念,但是具体的实现方式还是有比较大的差异。所以我们可以认为,副本集会存在一主多从的关系。

一般情况下,同一个分区的多个副本会被均匀分配到集群中的不同 broker 上,当 leader 副本所在的 broker 出现故障后,可以重新选举新的 leader 副本继续对外提供服务。通过这样的副本机制来提高 kafka 集群的可用性。

副本分配算法

将所有 N Broker 和待分配的 i 个 Partition 排序. 将第 i 个 Partition 分配到第(i mod n)个 Broker 上. 将第 i 个 Partition 的第 j 个副本分配到第((i + j) mod n)个 Broker 上

创建一个带副本机制的 topic

通过下面的命令去创建带 2 个副本的 topi

./kafka-topics.sh --create --zookeeper
192.168.11.156:2181 --replication-factor 2 --partitions 3 --topic secondTopic

然后我们可以在/tmp/kafka-log 路

### Kafka 高可用机制解析 Kafka高可用性 (High Availability, HA) 是通过多个设计层面来实现的,确保即使在部分节点失效的情况下也能持续提供服务。 #### 副本机制 为了提高数据的安全性和可靠性,Kafka 将消息存储到多个副本中。这些副本分布在不同的 Broker 上。当生产者向主题发送消息时,默认情况下会写入 Leader 副本,而 Follower 副本则异步复制Leader的数据[^4]。 ```python from kafka import KafkaProducer producer = KafkaProducer(bootstrap_servers='localhost:9092') future = producer.send('my-topic', b'raw_bytes') result = future.get(timeout=60) ``` #### 自动故障转移 如果某个 Partition 的 Leader 发生故障无法工作,则 Controller 节点会选择一个新的 Leader 来接管该分区的服务请求。这种自动化的领导者选举过程可以最小化宕机时间并保持系统的连续运行状态[^1]。 #### 同步与异步复制策略 对于同步复制模式下的 ISR(In-Sync Replicas),只有当大多数ISR确认接收到新记录之后才会提交给消费者;而对于异步方式来说,Follower 只需定期拉取最新的日志条目即可。这种方式既保证了一定程度的一致性又兼顾了性能效率[^3]。 #### 数据持久化保障 除了上述措施外,Kafka 还采用了本地磁盘文件系统作为底层存储介质,并支持配置合理的预写日志(Write-Ahead Log),从而进一步增强了其抵御硬件损坏风险的能力。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值