Kafka原理

Kafka概述

Kafka构架

Kafka的Partition log是如何工作的?

Kafka的Consumer是如何获取消息的?

Kafka会不会丢失数据?

Kafka会不会重复数据?

概述

Apache Kafka is a distributed streaming platform.

A streaming platform has three key capabilities:

1)Publish and subscribe to streams of records, similar to a message queue or enterprise messaging system.

2)Store streams of records in a fault-tolerant durable way.

3)Process streams of records as they occur.

简而言之,Kafka是一个基于zookeeper的分布式流处理平台,既有消息系统的发布订阅功能又能一定程度上保存message以供后期统计及计算。Kafka因其可扩展、容灾能力和解耦服务等特性大量的应用于各种流业务中。

核心概念:Kafka基于log这种抽象数据模型,log是一种只能追加且按照时间完全有序的记录序列。1分钟了解什么是log



Kafka构架


Kafka宏观框架


从图中可以看到,Kafka有常见的生产者、消费者。流处理模块是指可以对输入流数据进行加工和转换的中间系统


Kafka内部构架图

1)Producer生产消息到发送缓冲区,然后发送至Kafka 对应的topic的leader节点

2)Kafka计算消息的hash值用来确定发送至哪一个Partition(每一个Partition都是一个log)

3)Kafka是可容灾的消息系统,因此需要对数据进行备份,同一份数据会被复制到其他broker的partition中

4)broker通过ack来应答Producer收到此消息,通过这一机制防止网络丢失数据包导致的

5)Consumer通过pull拉取对应的partition数据并处理,同时也发送ack至kafka表明已处理这条数据,下次拉取时不会重复消费

因此可以知道,Kafka通过broker集群来解决容灾问题,通过多个partition来存储消息并保证消息顺序,每个consumer从一个partition里获取消息并处理。通过ack来保证消息不重复消费



Kafka的Partition log是如何工作的?


Kafka Message存储方式


topic leader接收到message后,先hash然后将消息append到对应的partition,因此可以保证对于同一key的消息,kafka可以保证其写入同一partition log,也就保证了其有序性

Kafka log实现 类似于ConcurrentHashMap

Kafka的log和ConcurrentHashMap java7实现类似,有一个段列表,每个entry指向了真正的disk segment。由于log是只能追加且按照时间完全有序的记录序列,所以每次都从最后一个记录取数据,因此取数据的复杂度是O(1)



Kafka的Consumer是如何获取消息的?


Kafka 消费者组

1)任意消费组内,每个partition有且仅有一个consumer,因此kafka保证每个partition的消息处理是无锁且有序的,因此kafka才有大吞吐量

2)任一partition会被每个消费组消费,因此当需要对同一份message处理两种逻辑,可以分为两个消费组

3)GroupId是topic下的一个子概念,不同topic的groupId没有任何关系,即使他们的值相同


未完待续

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

推荐阅读更多精彩内容

  • Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统。主要设计目标如下: 以时间复杂度为O(1)的方...
    Alukar阅读 3,071评论 0 43
  • 姓名:周小蓬 16019110037 转载自:http://blog.csdn.net/YChenFeng/art...
    aeytifiw阅读 34,685评论 13 425
  • 本文转载自http://dataunion.org/?p=9307 背景介绍Kafka简介Kafka是一种分布式的...
    Bottle丶Fish阅读 5,418评论 0 34
  • 目标 高吞吐量来支持高容量的事件流处理 支持从离线系统加载数据 低延迟的消息系统 持久化 依赖文件系统,持久化到本...
    jiangmo阅读 1,256评论 0 4
  • 年会了 一年一度没中奖 小李子说 「我就是他的终极大奖」
    摘摘摘星阅读 76评论 0 0