Kafka~基础原理与架构了解

Kafka是什么

Kafka我们了解一直认为是一个消息队列,但是其设计初,是一个:分布式流式处理平台。流平台具有三个关键功能:

  1. 消息队列:发布和订阅消息流,这个功能类似于消息队列,这也是 Kafka 也被归类为消息队列的原因。
  2. 容错的持久方式存储记录消息流:Kafka 会把消息持久化到磁盘,有效避免了消息丢失的风险。
  3. 流式处理平台: 在消息发布的时候进行处理,Kafka 提供了一个完整的流式处理类库。

Kafka 主要有两大应用场景:

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

Kafka支持的俩种模型:

  1. 队列模型:使用队列(Queue)作为消息通信载体,满足生产者与消费者模式,一条消息只能被一个消费者使用,未被消费的消息在队列中保留直到被消费或超时。 比如:我们生产者发送 100 条消息的话,两个消费者来消费一般情况下两个消费者会按照消息发送的顺序各自消费一半。
  2. 订阅模型(Pub-Sub) 使用主题(Topic) 作为消息通信载体,类似于广播模式;发布者发布一条消息,该消息通过主题传递给所有的订阅者,在一条消息广播之后才订阅的用户则是收不到该条消息的。

核心概念

Producer、Consumer、Broker、Topic、Partition,我们一一介绍。
Kafka 将生产者发布的消息发送到 Topic(主题) 中,需要这些消息的消费者可以订阅这些 Topic(主题),如下图所示:
在这里插入图片描述

  • 生产者(Producer)::生产者负责将消息发布到Kafka集群中的一个或多个主题(Topic),每个Topic包含一个或多个分区(Partition)
  • Consumer(消费者) : 消费者负责从Kafka集群中的一个或多个主题消费消息,并将消费的偏移量(Offset)提交
    回Kafka以保证消息的顺序性和一致性。
  • Broker(代理) : 可以看作是一个独立的 Kafka 实例。多个 Kafka Broker 组成一个 Kafka Cluster。

Leader Broker:Leader Broker 是分区的主副本,它是负责处理消息读写请求的节点。生产者将消息发送到Leader Broker,消费者从 Leader Broker中拉取消息。
Follower Broker:Follower Broker 是 Leader Broker的备份节点,它负责与Leader Broker进行数据同步,以保持自己的数据与 Leader Broker保持一致。

  • Topic(主题) : Producer 将消息发送到特定的主题,Consumer 通过订阅特定的 Topic(主题) 来消费消息。

  • Partition(分区) : Partition 属于 Topic 的一部分。一个 Topic 可以有多个 Partition ,并且同一 Topic 下的 Partition 可以分布在不同的 Broker 上,这也就表明一个 Topic 可以横跨多个 Broker 。

  • Kafka Cluster(集群):在集群中,每个分区都有一个Leader Broker和多个Followeer Broker,只有Leader Broker才能处理生产者和消费者的请求,而Follower Broker只是LeaderBroker的为备份,用于提供数据的冗余备份和容错能力。如果Leader Broker发生故障,Kafka集群会自动将Follower Broker提升为新的 Leader Broker,从而实现高可用性和容错能力。

  • Zookeeper:ZooKeeper是Kafka集群中使用的分布式协调服务,用于维护Kafka集群的状态和元数据信息,例如
    主题和分区的分配信息、消费者组和消费者偏移量等。

多分区、多副本

上文说道, Kafka 为分区(Partition)引入了多副本(Replica)机制。分区(Partition)中的多个副本之间会有一个叫做 leader 的家伙,其他副本称为 follower。我们发送的消息会被发送到 leader 副本,然后 follower 副本才能从 leader 副本中拉取消息进行同步。

生产者和消费者只与 leader 交互。你可以理解为其他副本只是 leader 的拷贝,它们的存在只是为了保证消息存储的安全性。

当 leader 发生故障时会从 follower 中选举出一个 leader,但是 follower 中如果有和 leader 同步程度达不到要求的参加不了 leader 的竞选。

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

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

Zookeeper的作用

ZooKeeper 主要为 Kafka 提供元数据的管理和集群节点协调的功能。

Zookeeper 主要为 Kafka 做了下面这些事情:

  1. Broker 注册:在 Zookeeper 上会有一个专门用来进行 Broker 服务器列表记录的节点。每个 Broker 在启动时,都会到 Zookeeper 上进行注册,即到 /brokers/ids 下创建属于自己的节点。每个 Broker 就会将自己的 IP 地址和端口等信息记录到该节点中去。
  2. Topic 注册:在 Kafka 中,同一个Topic 的消息会被分成多个分区并将其分布在多个 Broker 上,这些分区信息及与 Broker 的对应关系也都是由 Zookeeper 在维护。比如我创建了一个名字为 my-topic 的主题并且它有两个分区,对应到 zookeeper 中会创建这些文件夹:/brokers/topics/my-topic/Partitions/0、/brokers/topics/my-topic/Partitions/1
  3. 负载均衡:上面也说过了 Kafka 通过给特定 Topic 指定多个 Partition, 而各个 Partition 可以分布在不同的 Broker 上, 这样便能提供比较好的并发能力。 对于同一个 Topic 的不同 Partition,Kafka 会尽力将这些 Partition 分布到不同的 Broker 服务器上。当生产者产生消息后也会尽量投递到不同 Broker 的 Partition 里面。当 Consumer 消费的时候,Zookeeper 可以根据当前的 Partition 数量以及 Consumer 数量来实现动态负载均衡。

在 Kafka 2.8 之前,Kafka 最被大家诟病的就是其重度依赖于 Zookeeper。在 Kafka 2.8 之后,引入了基于 Raft 协议的 KRaft 模式,不再依赖 Zookeeper,大大简化了 Kafka 的架构,让你可以以一种轻量级的方式来使用 Kafka。

工作原理

生产者发送的消息经过序列化后,相同主题和分区的消息,会被存放在同⼀个批次⾥,然后由⼀个独⽴的线程负责,从Zookeeper拿到信息,通过不同的分区策略,找到对应的分区,把它们发到 Kafka Broker 上。
在这里插入图片描述
分区的策略包括顺序轮询、随机轮询和 key hash 这 3 种⽅式。

⽐如主题 A 有 12 条消息,有 4个分区,如果采⽤顺序轮询的⽅式,152条消 息会顺序分配给这 4
个分区,后续消费的时候,也是按照分区粒度消费。
在这里插入图片描述

Kafka 消费是通过消费群组完成,同⼀个消费者群组,⼀个消费者可以消费多个分区,但是⼀个分区,只能被⼀个 消费者消费

分区与消费者的关系是n:1

在这里插入图片描述
如果消费者增加,会触发 Rebalance,也就是分区和消费者需要重新配对。

不同的消费群组互不⼲涉,⽐如下图的 2 个消费群组,可以分别消费这 4 个分区的消息,互不影响。
在这里插入图片描述

  • 30
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 《深入理解kafka(核心设计与实践原理) pdf》是一本介绍了Kafka技术原理、实现和部署的全面指南。它从多个角度阐述了Kafka的核心设计思想和实践原理,让读者可以更深入地理解Kafka的工作机制和应用场景。 本书首先介绍了Kafka的基本概念和架构,包括生产者、消费者、Broker、Topic和Partition等。随着阅读的深入,读者将学会如何使用Kafka进行数据传输和存储,并了解Kafka如何支持高吞吐量、高可用性和高扩展性。 《深入理解kafka(核心设计与实践原理) pdf》还重点阐述了Kafka的持久化存储机制、消息传递方式和消息压缩技术。它详细介绍了Kafka中不同的数据结构和算法,以及如何优化Kafka的性能和可靠性。 此外,本书还附带了丰富的实例和案例分析,帮助读者更深入地了解Kafka的应用场景和实际应用。例如,它介绍了如何使用Kafka进行日志集中存储、实时流式处理、事件驱动等。 总之,《深入理解kafka(核心设计与实践原理) pdf》是一本深度剖析Kafka技术的书籍,不仅适合Kafka初学者,也适合已经有一定经验的开发者和架构师。它不仅告诉读者Kafka的基本原理,更重要的是让读者深入理解Kafka的应用场景,掌握Kafka的最佳实践。 ### 回答2: 《深入理解kafka(核心设计与实践原理) pdf》是一本对于Kafka消息队列系统进行深入探究的书籍。Kafka是开源的分布式消息系统,它具有高吞吐、可靠性和可扩展性等优点,因此已经被广泛应用于各类实时数据处理场景中。 该书从Kafka基础概念讲起,包括Kafka的消息模型、生产者和消费者的架构以及Kafka集群的工作原理。它还详细介绍了Kafka的API,包括生产者API、消费者API和管理API等,并结合实际案例进行讲解,使读者能够更好地理解这些API的使用方法和场景。 书中还介绍了Kafka的重要性能指标,包括吞吐量、延迟和可靠性等指标,并提供了一些优化性能的实践方法,帮助读者更好地提高Kafka的应用性能。 此外,该书还深入研究了Kafka如何处理故障和容错,包括故障转移、数据备份和恢复等方面。它也讨论了一些高级主题,如Kafka的安全性、复制和分区等,并提供了一些实践案例和代码示例,以帮助读者更好地掌握这些概念和技术。 总而言之,《深入理解kafka(核心设计与实践原理) pdf》是一本权威的Kafka技术指南,它通过清晰地阐述Kafka的基本原理、性能指标、容错处理和高级主题等内容,全面介绍了Kafka的核心设计和实践原理,帮助读者更好地应用Kafka来处理实时数据和构建可靠的分布式系统。 ### 回答3: 《深入理解kafka(核心设计与实践原理) pdf》是kafka技术方面的一本经典书籍,该书着重介绍了kafka的核心设计和实践原理kafka是一种高吞吐量分布式消息系统,它能够快速的处理流式数据,因此在实时处理大数据方面非常有用。 该书主要分为四部分,第一部分介绍了kafka基础知识,包括kafka是什么,为什么要使用kafka等,还详细介绍了kafka架构、核心组件和通信协议等。第二部分介绍了kafka的生产者和消费者模型,包括kafka的消息模型、消息处理流程等。第三部分深入讲解了kafka集群的管理和优化,包括kafka的监控、故障排查、性能调优等。最后一部分介绍了kafka的高级应用,包括kafka在大数据处理、实时数据分析等方面的应用。 该书通俗易懂,以实例为主,将复杂的技术原理浓缩到了1000多页的书籍里,给读者提供很好的阅读体验。在这本书中,读者可以深入理解kafka的设计思想,掌握kafka的核心原理和实践技巧,能够高效地应用kafka在实际项目中。无论你是kafka的初学者还是熟练使用者,本书都是一本非常优秀的参考书籍,有助于你更深入理解kafka的技术实现细节。如果你对kafka感兴趣,想要深入理解kafka的设计和工作原理,这本书将是你的不二之选。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值