作者:小汪哥写代码 2021-07-02 06:27:00
开发
架构
Kafka Kafka 是一种高吞吐量、分布式、基于发布/订阅的消息系统,最初由 LinkedIn 公司开发,使用 Scala (JAVA)语言编写,目前是Apache 的开源项目。
broker
Kafka 服务器,负责消息存储和转发。
topic
消息类别,Kafka 按照topic 来分类消息;似于关系型数据库的表。
partition
topic 的分区,一个 topic 可以包含多个 partition ,topic 消息保存在各个 partition 上。
offset
消息在日志中的位置,可以理解是消息在partition 上的偏移量,也是代表该消息的唯一序号。
Producer
消息生产者,将消息push到Kafka集群中的Broker。
Consumer
消息消费者,从Kafka集群中pull消息,消费消息。
Consumer Group
消费者分组,每个Consumer 必须属于一个group
Zookeeper
保存着集群broker、topic、partition 等meta 数据;另外,还负责broker 故 障发现,partition leader 选举,负载均衡等功能。
从宏观的层面来理解,它就是一个存储系统。
细分一下,又有多个生产者,多个消费者,Broker 集群和Kafka 组成。
再次细分,broker有一个controller角色,每一个broker 可能存多个Topic的不同partion,每个partion 都有 leader 和follower 。这些信息都会注册到zk上。
我们熟知一个规律:在大数据分布式文件系统里面,95%的都是主从式的架构,个别是对等式的架构,比如ElasticSearch。
kafka也是主从式的架构,主节点就叫controller,其余的为从节点,controller是需要和zookeeper进行配合管理整个kafka集群。
协调与管理整个集群。
基于zookeeper实现,利用了zookeeper的znode模型与监听机制。
存在单点故障,但是每个broker节点都可以成为controller;
故障转移即failover也是基于zookeeper实现的,znode模型与监听机制,/controller节点。
2021年3月30日,Kafka背后的企业Confluent发布博客表示,在即将发布的 2.8 版本里,用户可在完全不需要 ZooKeeper 的情况下运行 Kafka,该版本将依赖于 ZooKeeper 的控制器改造成了基于 Kafka Raft 的 Quorm 控制器。
在之前的版本中,如果没有 ZooKeeper,Kafka 将无法运行。但管理部署两个不同的系统不仅让运维复杂度翻倍,还让 Kafka 变得沉重,进而限制了 Kafka 在轻量环境下的应用,同时 ZooKeeper 的分区特性也限制了 Kafka 的承载能力。
第一次,用户可以在没有 ZooKeeper 的情况下运行 Kafka。
这是一次架构上的重大升级,让一向“重量级”的 Kafka 从此变得简单了起来。轻量级的单进程部署可以作为 ActiveMQ 或 RabbitMQ 等的替代方案,同时也适合于边缘场景和使用轻量级硬件的场景。
zk的缺点:
ZooKeeper 充当 Kafka 的领导者,以更新集群中的拓扑更改;根据 ZooKeeper 提供的通知,生产者和消费者发现整个 Kafka 集群中是否存在任何新 Broker 或 Broker 失败。大多数的运维操作,比如说扩容、分区迁移等等,都需要和 ZooKeeper 交互。
也就是说,Kafka 代码库中有很大一部分是负责实现在集群中多个 Broker 之间分配分区(即日志)、分配领导权、处理故障等分布式系统的功能。而早已经过业界广泛使用和验证过的 ZooKeeper 是分布式代码工作的关键部分。
假设没有 ZooKeeper 的话,Kafka 甚至无法启动进程,但严重依赖 ZooKeeper,也给 Kafka 带来了掣肘。
不过目前大部分用的还是和zk结合版本的kafka。
名称栏目:基础概念、架构和新版的升级-Kafka知识体系(一)
网站URL:http://www.shufengxianlan.com/qtweb/news48/337348.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联