技术10期:什么是Kafka?【全解析】
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?【全解析】相关推荐
- 语音识别技术发展史与行业最佳实践全解析
原标题:语音识别技术发展史与行业最佳实践全解析 在人工智能技术的探索征程里,语音语义识别技术一直扮演着先驱的角色,不管是在技术探索还是商业落地方面都走在了前面.近两年来随着深度学习技术的进一步深入,其 ...
- 【链块技术10期】区块链基础语言(二)——GO语言开发环境搭建
原文链接:区块链基础语言(二)--Go语言开发环境搭建 一.操作系统位数的查询方法 在安装前首先要了解个人的电脑系统位数是32位还是64位. 1.1Windows系统查询方法 右击"计算 ...
- 【比特熊故事汇】X Microsoft Build 2022——微软专家+MVP,技术亮点全解析
大家好!我是爱吃.爱玩.更爱学习技术,IT届的新晋小网红,开发者的好朋友比特熊! 比特熊:特别联名Microsoft Build 2022,本期[比特熊故事汇]请来重量级嘉宾,突破直播间嘉宾数新高!由 ...
- 全面解锁Kubernetes?百度爱番番技术实践全解析
导读:Linux 基金会执行董事 Jim Zemlin 曾说道:"我见证了开源圈子的两大事件:一个是 Linux 的成功,一个就是 Kubernetes 和云原生的大爆发.开源是历史上最成功 ...
- Kafka设计解析(六)- Kafka高性能关键技术解析
http://www.infoq.com/cn/articles/kafka-analysis-part-6 宏观架构层面 利用Partition实现并行处理 Partition提供并行处理的能力 K ...
- 工业机器人技术全解析,值得收藏!
来源:先进制造业 一.工业机器人的发展背景 1920年,捷克剧作家卡里洛·奇别克在其科幻剧本<罗萨姆万能机器人制造公司>(Rossum's Universal Robots)首次使用了RO ...
- 如何提升推荐系统的可解释性?京东智能推荐卖点技术全解析
导读:京东智能商客之推荐卖点是基于NLP的产品,目前已广泛地助力和赋能于京东商城的各个平台.今天和大家分享一下自然语言处理如何在工业界落地实现.主要围绕以下5个方面展开: 推荐卖点技术背景 架构描述 ...
- 【20110115 InfoQ 百度技术沙龙 2010 第 10 期】会议记录
20100115 参加了InfoQ 百度技术沙龙第 10 期活动,去的较晚,只参与了后半段,对所听到的.参与的要点记录如下. 一.百度技术沙龙 2011 总结及 2011 展望 这部分数据主要是通过百 ...
- Kafka设计解析(七)- Kafka Stream
本文转发自技术世界,原文链接 http://www.jasongj.com/kafka/kafka_stream/ Kafka Stream背景 Kafka Stream是什么 Kafka Strea ...
最新文章
- Java一个线程能否结束另一个永不停止的线程
- 计算机网络中网络拓扑,计算机网络基础知识:不同的网络拓扑结构对网络的影响...
- gentoo下使能subversion自动补全
- pytorch:ResNet50做新冠肺炎CT照片是否确诊分类
- ubuntu无法获得锁 /var/lib/dpkg -open 问题
- win2003 IIS6配置PHP 5.3.3(fastCGI方式+eAccelerator)+ASP.NET 4.0(MVC3)
- 斯坦福后空翻机器人设计、代码全开源
- silic php 马,Silic PHP大马Cookie欺骗漏洞
- toolchain安装教程支持_orocos toolchain安装
- 服务器主板如何连接无线网卡,无线网卡如何设置WiFi共享模式?
- 论文笔记 A brief introduction to weakly supervised learning - 2017
- 宏先生说:口罩和额温枪的套路!
- python 100days github_GitHub - 2668599092/Python-100-Days: Python - 100天从新手到大师
- Linux下怎么mount下载宝硬盘为本地目录
- 2021年软件定义通信发展环境(PEST)分析:新兴网络业务推动软件定义通信行业发展 [图]
- python修改文件内容_Python之文件处理-批量修改md文档内容-Go语言中文社区
- 一张图片的CSS自适应尺寸圆角方案
- 光猫、路由器、交换机、wifi通俗释义
- 解决编译glad卡在glad opening的问题
- Mybatis源码学习-MapperMethod
热门文章
- 生物学的机器学习:使用K-Means和PCA进行基因组序列分析 COVID-19接下来如何突变?...
- 170个新项目,579个活跃代码仓库,Facebook开源年度回顾
- 开源如何占领软件世界?
- AI做不了“真”3D图像?试试Google的新生成模型
- Alphabet旗下自驾公司Waymo入华,变身“慧摩”!
- 公司用的 MySQL 团队开发规范
- SpringBoot集成Swagger-Bootstrap-UI,页面更清爽!
- 阿里二面:如何设计与实现短URL服务?
- 咱们从头到尾说一次 Java 垃圾回收
- 源码解析Spring Cloud Zuul