快速了解kafka的基础架构

image

简书不维护了,欢迎关注我的知乎:波罗学的个人主页

今天来聊下在大数据场景下比较流行的消息队列组件kafka。本篇文章将主要从理论角度来介绍。

kafka是一款开源、追求高吞吐、实时性,可持久化的流式消息队列,可同时处理在线(消息)与离线应用(业务数据和日志)。在如今火热的大数据时代,得到了广泛的应用。

整体架构

kafka的消息以Topic进行归类,支持分布式distribution、可分区partition和可复制replicated的特性。下面为本人梳理的一张Kafka系统架构图。

image.png

Kafka的架构相较于其他消息系统而言,比较简单。其整体流程简述如下

Producer与指定Topic各分区Partition的Leader连接,从而将消息push到Broker中。
Broker可理解消息系统的中间代理,将消息写入磁盘实现持久化,并可对消息复制备份。
Consumer采用pull的方式主动获取broker中指定Topic的消息,并进行处理。
Zookeeper负责Kafka服务相关metadata的存储,如broker,topic和consumer等信息的存储。

注:zookeeper是一个分布式协调服务,分布式应用可基于它实现同步服务,配置维护和命名服务等。此篇文章不做介绍,以后有时间再做总结!

下面对涉及的各个组件作详细介绍。

主题Topic

首先,Kafka中的消息以Topic分类管理。在Kafka中,一个topic可被多个Consumer订阅。通过集群管理,每个Topic可由多个Partition组成。如下图

image.png

从上图可以看出,Topic中数据是顺序不可变序列,采用log追加方式写入,因而kafka中无因随机写入导致性能低下的问题。

Topic的数据可存储在多个partition中,即可存放在不同的服务器上。这可使Topic大小不限于一台server容量。同时,消息存在多个partition上,可以实现Topic上消息的并发访问。

Kafka中数据不会因被consumer消费后而丢失,而是通过配置指定消息保存时长。Topic中每个partition中的消息都有一个唯一的标识,也称为offset。因数据不会因消费而丢失,所以只要consumer指定offset,一个消息可被不同的consumer多次消费。

image.png

基于此,消息获取即可采用顺序访问,我们也可以指定任意offset随机访问,且不会对其他consumer产生影响。

分布式Distribution

Kafka的集群分布式主要涉及两个内容:Partition分区与Replication备份。

Partition实现将Topic中的各个消息存储到不同的分区中,从而分布在不同的Kafka节点之上,使Topic的数据大小不限于一台Server。

Replication主要用于容错,对一个Partition复制多份,存储在不同kafka节点上。这可防止因某一分区数据丢失而导致错误。

虽然Relication复制Partition多份,但其中只有一个为Leader角色,其余Partition角色皆为Follower。Producer发布消息都是由Leader负责写入,并同步到其他的Follower分区中。如果Leader失效,则某个Follower会自动替换,成为新的Leader分区。此时,Follower可能落后于Leader,所以从所有Follower中选择一个”up-to-date”的分区。

关于性能方面,考虑Leader不但承载了客户的连接与消息写入,还负责将消息同步至不同的Follower分区上,性能开销较大。因此,不同Partition的Leader分布在不同的kafka节点上,从而防止某个节点压力过载。

为了更好了解Partition与Replication关系。举个例子,假设现有一个Topic名为spark_topic,其Partition分区数量为3,Replication备份因子为2。则效果如下图

image.png

spark_topic存在spark_topic-1,spark_topic-2,spark_topic-3共三个分区。而每个分区均有两处备份,如spark_topic-1,其同时存在于kafka节点broker0与broker1上,其中broker01上的分区角色为Leader。

消费者Consumer

Consumer负责消费消息。Kafka中Consumer消费消息采用fetch方式主动拉取,这种方式的好处是Consumer客户端能根据自己的处理消息能力决定消息获取的速度与批量获取的数量,从而防止系统过载。

Kafka的消息并不会因为消息被Consumer消费而丢失,因而其提供一个唯一的标识offset实现消息的顺序获取,而offset需要consumer自行维护,非kafka节点服务管理。这不同于传统的消息系统。在Kafka集群中,消费者的信息与offset在zookeeper也有保存维护,Consumer会间歇性向zookeeper同步offset。

Kafka的Consumer提供分组功能,每个Consumer都属于一个分组。那分组的作用是什么呢?

类似queue模式,一个Consumer分组的多个Consumer订阅同一个Topic,一条消息只分发给其中一个Consumer,实现负载均衡效果。

发布订阅模式,而不同组的多个Consumer订阅同一个Topic,一条消息会广播给在不同分组的所有Consumer。

image

请注意,在Kafka中,同一Consumer分组中,一个Consumer只能订阅一个Topic中的Partition,因而在一个Consumer分组中,同时订阅同一个Topic的Consumer的个数不能超过Partition分区数。可参看上图所示。

同样,为减少网络IO开销,Consumer可采用batch fetch方式实现一次批量获取多条消息。

应用场景

下面是一些官网介绍的Kafka应用场景,包括消息系统、网站行为跟踪、应用监控、日志收集等等。

消息系统

Kafka可以作为传统消息系统的替代。相比传统消息,Kafka有更高的吞吐量、拥有内置的分区Partition、复制备份高容错能力。

传统消息系统对高吞吐量没有过高要求,但kafka的低延迟特性和强大的备份容错能力是传统消息所必须的。

网站行为追踪

Kafka可用于用户行为追踪,通过将用户行为数据发送给Kafka。以此为基础,实现用户行为在线与离线分析,可用于网站实时监控与异常行为拦截等。

日志收集

Kafka可以作为日志收集解决方案。日志收集通常是将不同服务器的日志文件收集到一个中心区域,Kafka实现了对日志文件数据进行抽象,统一了处理接口。Kafka低延迟,支持不同的日志数据源,分布式消费易于扩展,可同时将数据提供给hdfs、storm、监控软件等等。

应用监控

Kafka可用于监控运行中的应用系统。如收集分布式应用的数据进行聚合计算,进行分析检测异常情况。

个人感觉,本质和网站行为分析异常监控有异曲同工之处,只不过所监控的数据对象不同罢了。

结束

利用两周末学习总结了大数据中常用的消息队列服务-Kafka。本篇主要从架构角度介绍。个人感觉,介绍系统架构比操作实战更加困难,文章如有错误,请帮忙请指正。

知乎地址:https://zhuanlan.zhihu.com/p/58658870

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352