Kafka

Kafka介绍

最初由LInkedin开发,分布式,分区,多副本,多生产者,多订阅者,基于zookeeper协调的分布式日志系统

kafka消息传递模式:发布订阅模式。主要的消息传递模式:点对点传递模式、发布-订阅模式

消息分推、拉两种模式。Kafka只有消息的拉取,没有推送,可以通过轮询实现消息的推送。

  1. Kafka在⼀个或多个可以跨越多个数据中⼼的服务器上作为集群运⾏。
  2. Kafka集群中按照主题分类管理,⼀个主题可以有多个分区,⼀个分区可以有多个副本分区。
  3. 每个记录由⼀个键,⼀个值和⼀个时间戳组成。

优势

  1. 高吞吐量,每秒处理几十上百万消息
  2. 高性能,单节点支持上千个客户端
  3. 持久化数据存储
  4. 分布式系统
  5. 可靠性
  6. 客户端状态维护

应用场景

  • 日志收集
  • 消息中间件
  • 流式处理
  • 用户活动跟踪

基本架构

主题分区

主题可以被分为若⼲分区,⼀ 个主题通过分区分布于Kafka集群中,提供了横向扩展的能⼒。

# 创建主题
kafka-topics.sh --zookeeper localhost:2181/myKafka --create --topic
topic_1 --partitions 1 --replication-factor 1

# 查看指定主题的详细信息
kafka-topics.sh --zookeeper localhost:2181/myKafka --describe --topic
topic_1

# 开启⽣产者
kafka-console-producer.sh --topic topic_1 --broker-list localhost:9020

# 开启消费者
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic
topic_1

副本

  • 首领副本,每个分区都有⼀个⾸领副本。为了保证⼀致性,所有⽣产者请求和消费者请求都会经过这个副本。
  • 跟随者副本,跟随者副本不处理来⾃客户端的请求,它们唯⼀的任务就是从⾸领那⾥复制消 息,保持与⾸领⼀致的状态。

HW

HW是High Watermak的缩写, 俗称⾼⽔位,它表示了⼀个特定消息的偏移量(offset),消费之只能拉取到这 个offset之前的消息。

高级特性

消息发送

生产端:

  1. 创建Sender线程
  2. 生产的消息经过 拦截器,序列化器,分区器,缓存在RecordAccumulator缓冲区
  3. 批次发送满足 缓冲区数据大小达到 batch.size或者 linger.ms(时间)达到上限
  4. 发送到broker指定分区,落盘。失败重试
  5. 落盘成功,返回生产元数据给生产者

分区器

  1. 如果record提供了分区号,则使⽤record提供的分区号
  2. 如果record没有提供分区号,则使⽤key的序列化后的值的hash值对分区数量取模
  3. 如果record没有提供分区号,也没有提供key,则使⽤轮询的⽅式分配分区号。

拦截器

拦截器的顺序 1,2,3 返回的顺序也是 1,2,3 区别于 Servlet的返回顺序

位移提交

Consumer向kafka 记录自己的位移数据,偏移量存储在 __consume_offsets 主题

同步提交

  • 阻塞Consumer,直到broker返回结果

异步提交

  • 异步提交不会自动重试

重平衡

  1. 消费者成员变更
  2. 主题分区的数量变更
  3. 订阅的主题发生变化,消费者使用正则表达式订阅主题

消费者

Leader 分区负责读写,Follower 分区负责同步 Leader分区的消息

Follower分ISR(与Leader分区数据一致),OSR(落后于Leader分区)。

  • Leader分区宕机,ISR集合中随机挑选一个成为Leader
  • ISR副本都宕机,
    • 等待ISR副本恢复
    • 选择OSR复本,会造成数据丢失

分区分配策略

默认采用RangeAssignor分配算法

  • RangeAssignor

    7个分区,2个消费者,【1,4】分给消费者1,【5,7】分给消费者2

  • 轮询

  • Sticky

    仅对消费者宕机影响的分区,重新分配给其他消费者

Kafka速度快是因为:

  1. partition顺序读写,充分利⽤磁盘特性,这是基础;
  2. Producer⽣产的数据持久化到broker,采⽤mmap⽂件映射,实现顺序的快速写⼊;
  3. Customer从broker读取数据,采⽤sendfile,将磁盘⽂件读到OS内核缓冲区后,直接转到socket buffer进⾏⽹络发送。

控制器

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

推荐阅读更多精彩内容