Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的、多副本的,基于zookeeper协调的分布式消息系统。

它最大的特性就是可以实时处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志、消息服务等等。

Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目

01 kafka的定义和特征

Kafka是一个分布式的基于发布/订阅模式的消息队列,主要用来解决应用解耦、异步消息、流量削峰等问题。

3个特点

  • 类似消息系统,提供事件流的发布和订阅,即具备数据注入功能

  • 存储事件流数据的节点具有故障容错的特点,即具备数据存储功能

  • 能够对实时的事件流进行流式地处理和分析,即具备流处理功能

02 Kafka的架构

  • Producer:消息生产者,就是向 kafka broker 发消息的客户端

  • Consumer:消息消费者,就是向 kafka broker 取消息的客户端

  • Broker :一台 kafka 服务器就是一个 broker。一个集群由多个 broke 组成。一个 broker 可以容纳多个 topic

  • Consumer Group (CG):消费者组,由多个 consumer 组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响

  • Topic :可以理解为一个队列,生产者和消费者面向的都是一个 topic

  • Partition:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务 器)上,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列

  • Replica:副本,为保证集群中的某个节点发生故障时,该节点上的 partition 数据 不丢失,且 kafka 仍然能够继续工作,kafka 提供了副本机制,一个 topic 的每个分区都有若干个副本, 一个 leader 和若干个 follower

  • leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数 据的对象都是 leader

  • follower:每个分区多个副本中的“从”,实时从 leader 中同步数据,保持和 leader数据 的同步。leader 发生故障时,某个 follower 会成为新的 follower

03 生产者

(1)  数据可靠性保证

为保证 producer 发送的数据,能可靠的发送到指定的 topic,topic 的每个 partition 收到 producer 发送的数据后,都需要向 producer 发送ack(acknowledgement 确认收到),如果 producer 收到 ack,就会进行下一轮的发送,否则重新发送数据。

(2)  Ack应答机制

  • Ack=0:producer 不等待 broker 的 ack,这一操作提供了一个最低的延迟,broker 一接收到还没有写入磁盘就已经返回,当 broker 故障时有可能丢失数据

  • Ack=1:producer 等待 broker 的 ack,partition 的 leader 落盘成功后返回 ack,如果在 follower 同步成功之前 leader 故障,那么将会丢失数据

  • Ack=-1:producer 等待 broker 的 ack,partition 的 leader 和 follower 全部落 盘成功后才 返回 ack。但是如果在 follower 同步完成后,broker 发送 ack 之前,leader 发生故障,那么会造成数据重复

(3) 故障处理

  • follower 故障

follower发生故障后会被临时踢出ISR,待该follower 恢复后,follower会读取本地磁盘 记录的上次的HW,并将log文件高于HW的部分截取掉,从HW开始向leader进行同步。

等该follower的LEO大于等于该Partition的HW,即 follower 追上 leader 之后,就可以重新加入ISR 了。

  • leader 故障

leader 发生故障之后,会从 ISR 中选出一个新的 leader,之后,为保证多个副本之间的数据一致性,其余的follower 会先将各自的log文件高于 HW 的部分截掉,然后从新的 leader同步数据。

04 消费者

(1) 消费方式

consumer 采用 pull(拉) 模式从 broker 中读取数据。push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由 broker 决定的。

它的目标是尽可能以最快速度传递消息,但是这样很容易造成 consumer 来不及处理消息,典型的表现就是拒绝服务以及网络拥塞。

而 pull 模式则可以根据 consumer 的消费能力以适当的速率消费消息。pull 模式不足之处是,如果 kafka 没有数据,消费者可能会陷入循环中,一直返回空数据。

针对这一点,Kafka的消费者在消费数据时会传入一个时长参数timeout,如果当前没有数据可供消费,consumer 会等待一段时间之后再返回,这段时长即为 timeout。

(2) Offset的维护

由于 consumer 在消费过程中可能会出现断电宕机等故障,consumer 恢复后,需要从故障前的位置的继续消费,所以 consumer 需要实时记录自己消费到了哪个 offset,以便故障恢复后继续消费。

Kafka 0.9 版本之前,consumer 默认将 offset 保存在 Zookeeper 中,从 0.9 版本开始,consumer 默认将 offset 保存在 Kafka 一个内置的 topic 中,该 topic为__consumer_offsets。

总结:

Kafka是一个分布式、支持分区的、多副本的,基于zookeeper协调的分布式消息系统,是当前大数据解决方案的标配,广泛用于大数据框架间的数据发布和订阅,所以深入理解Kafka内部机制就非常必要。

- 完 -

想了解更多关于人工智能的资讯

欢迎关注普适极客

技术10期:什么是Kafka?【全解析】相关推荐

  1. 语音识别技术发展史与行业最佳实践全解析

    原标题:语音识别技术发展史与行业最佳实践全解析 在人工智能技术的探索征程里,语音语义识别技术一直扮演着先驱的角色,不管是在技术探索还是商业落地方面都走在了前面.近两年来随着深度学习技术的进一步深入,其 ...

  2. 【链块技术10期】区块链基础语言(二)——GO语言开发环境搭建

    ‍原文链接:区块链基础语言(二)--Go语言开发环境搭建 一.操作系统位数的查询方法‍ 在安装前首先要了解个人的电脑系统位数是32位还是64位. 1.1Windows系统查询方法 右击"计算 ...

  3. 【比特熊故事汇】X Microsoft Build 2022——微软专家+MVP,技术亮点全解析

    大家好!我是爱吃.爱玩.更爱学习技术,IT届的新晋小网红,开发者的好朋友比特熊! 比特熊:特别联名Microsoft Build 2022,本期[比特熊故事汇]请来重量级嘉宾,突破直播间嘉宾数新高!由 ...

  4. 全面解锁Kubernetes?百度爱番番技术实践全解析

    导读:Linux 基金会执行董事 Jim Zemlin 曾说道:"我见证了开源圈子的两大事件:一个是 Linux 的成功,一个就是 Kubernetes 和云原生的大爆发.开源是历史上最成功 ...

  5. Kafka设计解析(六)- Kafka高性能关键技术解析

    http://www.infoq.com/cn/articles/kafka-analysis-part-6 宏观架构层面 利用Partition实现并行处理 Partition提供并行处理的能力 K ...

  6. 工业机器人技术全解析,值得收藏!

    来源:先进制造业 一.工业机器人的发展背景 1920年,捷克剧作家卡里洛·奇别克在其科幻剧本<罗萨姆万能机器人制造公司>(Rossum's Universal Robots)首次使用了RO ...

  7. 如何提升推荐系统的可解释性?京东智能推荐卖点技术全解析

    导读:京东智能商客之推荐卖点是基于NLP的产品,目前已广泛地助力和赋能于京东商城的各个平台.今天和大家分享一下自然语言处理如何在工业界落地实现.主要围绕以下5个方面展开: 推荐卖点技术背景 架构描述 ...

  8. 【20110115 InfoQ 百度技术沙龙 2010 第 10 期】会议记录

    20100115 参加了InfoQ 百度技术沙龙第 10 期活动,去的较晚,只参与了后半段,对所听到的.参与的要点记录如下. 一.百度技术沙龙 2011 总结及 2011 展望 这部分数据主要是通过百 ...

  9. Kafka设计解析(七)- Kafka Stream

    本文转发自技术世界,原文链接 http://www.jasongj.com/kafka/kafka_stream/ Kafka Stream背景 Kafka Stream是什么 Kafka Strea ...

最新文章

  1. Java一个线程能否结束另一个永不停止的线程
  2. 计算机网络中网络拓扑,计算机网络基础知识:不同的网络拓扑结构对网络的影响...
  3. gentoo下使能subversion自动补全
  4. pytorch:ResNet50做新冠肺炎CT照片是否确诊分类
  5. ubuntu无法获得锁 /var/lib/dpkg -open 问题
  6. win2003 IIS6配置PHP 5.3.3(fastCGI方式+eAccelerator)+ASP.NET 4.0(MVC3)
  7. 斯坦福后空翻机器人设计、代码全开源
  8. silic php 马,Silic PHP大马Cookie欺骗漏洞
  9. toolchain安装教程支持_orocos toolchain安装
  10. 服务器主板如何连接无线网卡,无线网卡如何设置WiFi共享模式?
  11. 论文笔记 A brief introduction to weakly supervised learning - 2017
  12. 宏先生说:口罩和额温枪的套路!
  13. python 100days github_GitHub - 2668599092/Python-100-Days: Python - 100天从新手到大师
  14. Linux下怎么mount下载宝硬盘为本地目录
  15. 2021年软件定义通信发展环境(PEST)分析:新兴网络业务推动软件定义通信行业发展 [图]
  16. python修改文件内容_Python之文件处理-批量修改md文档内容-Go语言中文社区
  17. 一张图片的CSS自适应尺寸圆角方案
  18. 光猫、路由器、交换机、wifi通俗释义
  19. 解决编译glad卡在glad opening的问题
  20. Mybatis源码学习-MapperMethod

热门文章

  1. 生物学的机器学习:使用K-Means和PCA进行基因组序列分析 COVID-19接下来如何突变?...
  2. 170个新项目,579个活跃代码仓库,Facebook开源年度回顾
  3. 开源如何占领软件世界?
  4. AI做不了“真”3D图像?试试Google的新生成模型
  5. Alphabet旗下自驾公司Waymo入华,变身“慧摩”!
  6. 公司用的 MySQL 团队开发规范
  7. SpringBoot集成Swagger-Bootstrap-UI,页面更清爽!
  8. 阿里二面:如何设计与实现短URL服务?
  9. 咱们从头到尾说一次 Java 垃圾回收
  10. 源码解析Spring Cloud Zuul