Kafka原理解析

Kafka 是一个分布式流式处理平台。LinkedIn 最早开发 Kafka 用于处理海量的日志有很大关系,最开始就不是为了作为消息队列的,由于高性能,以及随着发展很多短板都被逐步修复完善,后面才在消息队列领域占据了一席之地。

主要有两大应用场景:

  1. 消息队列 :建立实时流数据管道,以可靠地在系统或应用程序之间获取数据。
  2. 数据处理: 构建实时的流数据处理程序来转换或处理数据流。

Kafka架构

基础结构

  • Broker(代理) : 可以看作是一个独立的 Kafka 实例。多个 Kafka Broker 组成一个 Kafka Cluster。
  • Topic(主题) : Producer 将消息发送到特定的主题,Consumer 通过订阅特定的 Topic(主题) 来消费消息。
  • Partition(分区) : 一个 Topic 可以有多个 Partition ,并且同一 Topic 下的 Partition 可以分布在不同的 Broker 上,Producer在发送消息时会根据分区选择器选择一个分区进行发送,这样就可以实现负载均衡,提高吞吐的效果。
  • Replica(副本):Kafka 为分区(Partition)引入了多副本(Replica)机制。分区(Partition)中的多个副本之间会有一个leader和多个follower。发送的消息会被发送到 leader 副本,然后 follower 副本才能从 leader 副本中拉取消息进行同步,生产者和消费者只与 leader 副本交互。当 leader 副本发生故障时会从 follower 中选举出一个 leader,但是 follower 中如果有和 leader 同步程度达不到要求的参加不了 leader 的竞选。
  • Producer(生产者) : 产生消息的一方。
  • Consumer(消费者) : 消费消息的一方。

多分区(Partition)以及多副本(Replica)机制有什么好处呢?

  1. Kafka 通过给特定 Topic 指定多个 Partition, 而各个 Partition 可以分布在不同的 Broker 上, 这样便能提供比较好的并发能力(负载均衡)。
  2. Partition 可以指定对应的 Replica 数, 这也极大地提高了消息存储的安全性, 提高了容灾能力,不过也相应的增加了所需要的存储空间。

Kafka使用 Zookeeper保存Broker集群的元数据信息,主要包括Broker和Topic的元数据信息,老版的Kafka的消费者信息也是使用Zookeeper进行存储,新版则使用Broker存储消费者信息。

在创建Topic时,通过指定分区的个数(num.patitions),kafka会根据一定的策略将分区分配在不同broker上来保证高吞吐,同时每个分区又可以根据复制系数(replicatlon.factor)分配多个副本到不同broker上,保证消息的可靠性。副本类型分为首领副本跟随者副本,除了首领副本,其余都叫跟随者副本,首领副本会和跟随者副本之间进行数据同步。首领副本负责消息的写入和读取,首领副本所在的broker宕机之后,控制器会选择一个跟随者副本成为新的首领副本。控制器其实就是一个 broker,只不过它除了具有一般 broker 的功能之外,还负责分区首领的选举。

如何均匀进行分区、副本分配?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值