问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

3分钟带你彻底搞懂 Kafka

发布网友 发布时间:2022-10-16 02:33

我来回答

1个回答

热心网友 时间:2023-10-14 22:05

Kafka到底是个啥?用来干嘛的?

官方定义如下:

翻译过来,大致的意思就是,这是一个实时数据处理系统,可以横向扩展,并高可靠!

实时数据处理 ,从名字上看,很好理解,就是将数据进行实时处理,在现在流行的微服务开发中,最常用实时数据处理平台有 RabbitMQ、RocketMQ 等消息中间件。

这些中间件,最大的特点主要有两个:

在早期的 web 应用程序开发中,当请求量突然上来了时候,我们会将要处理的数据推送到一个队列通道中,然后另起一个线程来不断轮训拉取队列中的数据,从而加快程序的运行效率。

但是随着请求量不断的增大,并且队列通道的数据一致处于高负载,在这种情况下,应用程序的内存占用率会非常高,稍有不慎,会出现内存不足,造成程序内存溢出,从而导致服务不可用。

随着业务量的不断扩张,在一个应用程序内,使用这种模式已然无法满足需求,因此之后,就诞生了各种消息中间件,例如 ActiveMQ、RabbitMQ、RocketMQ等中间件。

采用这种模型,本质就是将要推送的数据,不在存放在当前应用程序的内存中,而是将数据存放到另一个专门负责数据处理的应用程序中,从而实现服务解耦。

消息中间件 :主要的职责就是保证能接受到消息,并将消息存储到磁盘,即使其他服务都挂了,数据也不会丢失,同时还可以对数据消费情况做好监控工作。

应用程序 :只需要将消息推送到消息中间件,然后启用一个线程来不断从消息中间件中拉取数据,进行消费确认即可!

引入消息中间件之后,整个服务开发会变得更加简单,各负其责。

Kafka 本质其实也是消息中间件的一种,Kafka 出自于 LinkedIn 公司,与 2010 年开源到 github。

LinkedIn 的开发团队,为了解决数据管道问题,起初采用了 ActiveMQ 来进行数据交换,大约是在 2010 年前后,那时的 ActiveMQ 还远远无法满足 LinkedIn 对数据传递系统的要求,经常由于各种缺陷而导致消息阻塞或者服务无法正常访问,为了能够解决这个问题,LinkedIn 决定研发自己的消息传递系统, Kafka 由此诞生

在 LinkedIn 公司,Kafka 可以有效地处理每天数十亿条消息的指标和用户活动跟踪,其强大的处理能力,已经被业界所认可,并成为大数据流水线的首选技术。

先来看一张图, 下面这张图就是 kafka 生产与消费的核心架构模型

如果你看不懂这些概念没关系,我会带着大家一起梳理一遍!

简而言之,kafka 本质就是一个消息系统,与大多数的消息系统一样,主要的特点如下:

与 ActiveMQ、RabbitMQ、RocketMQ 不同的地方在于,它有一个**分区 Partition **的概念。

这个分区的意思就是说,如果你创建的 topic 有5个分区,当你一次性向 kafka 中推 1000 条数据时,这 1000 条数据默认会分配到 5 个分区中,其中每个分区存储 200 条数据。

这样做的目的,就是方便消费者从不同的分区拉取数据,假如你启动 5 个线程同时拉取数据,每个线程拉取一个分区,消费速度会非常非常快!

这是 kafka 与其他的消息系统最大的不同!

和其他的中间件一样,kafka 每次发送数据都是向 Leader 分区发送数据,并顺序写入到磁盘,然后 Leader 分区会将数据同步到各个从分区 Follower ,即使主分区挂了,也不会影响服务的正常运行。

那 kafka 是如何将数据写入到对应的分区呢?kafka中有以下几个原则:

与生产者一样,消费者主动的去kafka集群拉取消息时,也是从 Leader 分区去拉取数据。

这里我们需要重点了解一个名词: 消费组

考虑到多个消费者的场景,kafka 在设计的时候,可以由多个消费者组成一个消费组,同一个消费组者的消费者可以消费同一个 topic 下不同分区的数据,同一个分区只会被一个消费组内的某个消费者所消费,防止出现重复消费的问题!

但是不同的组,可以消费同一个分区的数据!

你可以这样理解,一个消费组就是一个客户端,一个客户端可以由很多个消费者组成,以便加快消息的消费能力。

但是,如果一个组下的消费者数量大于分区数量,就会出现很多的消费者闲置。

如果分区数量大于一个组下的消费者数量,会出现一个消费者负责多个分区的消费,会出现消费性能不均衡的情况。

因此,在实际的应用中,建议消费者组的 consumer 的数量与 partition 的数量保持一致!

光说理论可没用,下面我们就以 centos7 为例,介绍一下 kafka 的安装和使用。

kafka 需要 zookeeper 来保存服务实例的元信息,因此在安装 kafka 之前,我们需要先安装 zookeeper。

zookeeper 安装环境依赖于 jdk,因此我们需要事先安装 jdk

下载zookeeper,并解压文件包

创建数据、日志目录

配置zookeeper

重新配置 dataDir 和 dataLogDir 的存储路径

最后,启动 Zookeeper 服务

到官网 http://kafka.apache.org/downloads.html 下载想要的版本,我这里下载是最新稳定版 2.8.0 。

按需修改配置文件 server.properties (可选)

server.properties 文件内容如下:

其中有四个重要的参数:

可根据自己需求修改对应的配置!

启动 kafka 服务

创建一个名为 testTopic 的主题,它只包含一个分区,只有一个副本:

运行 list topic 命令,可以看到该主题。

输出内容:

Kafka 附带一个命令行客户端,它将从文件或标准输入中获取输入,并将其作为消息发送到 Kafka 集群。默认情况下,每行将作为单独的消息发送。

运行生产者,然后在控制台中键入一些消息以发送到服务器。

输入两条内容并回车:

Kafka 还有一个命令行使用者,它会将消息转储到标准输出。

输出结果如下:

本文主要围绕 kafka 的架构模型和安装环境做了一些初步的介绍,难免会有理解不对的地方,欢迎网友批评、吐槽。

由于篇幅原因,会在下期文章中详细介绍 java 环境下 kafka 应用场景!

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
淘宝上如果卖家没发货 会不会有运单号码 大华H系列DVR(DH-DVR0404HE-L)重要参数 榆树市瑞宏人力资源有限公司怎么样? 六味巴巴公司简介 太原六味巴巴科技有限公司怎么样? 10点儿童房装修风水禁忌 超细纤维面料是什么 黄金台周边环境怎么样?生活便利吗? 波波头发型烫发短发波波头怎么打理 ...现在短发,想留长发。但是留了快三个月了还是扎不起来,怎么办... 红杉造句子 客厅风水布局知识 家里布置客厅的风水妙计 红米note3为什么不支持联通物联卡 有众能连接几个手机? 众星电动车怎么连接手机 众智行怎么连接手机 成都百悦星城具体信息? 成都市龙泉驿区天鹅湖小学一年级有英语课吗? 成都天鹅湖小学有五年级吗? 已从事临床医疗工作多年并取得执业医师资格证书必须参加住院医师规范化培训吗? 没有参加住院医师规范化培训的能否参加职称考试 报考主治医师必须要参加住院医师培训吗? 本科医学生可以不参加住院医师规范化培训吗 男子在马路上扶起被三轮车压在身下的老人,为何要承担百分之三十的责任? 开大车车辆起步有人钻车轮下被压死怎么判? 杭州一工程车碾碎两个生命是怎么回事? 2015年2月1日,浙江玉环一名老人摔倒后无人上前查看,后被1辆轿车碾压拖行,8分钟内4辆车经过, 半世浮云繁体怎么写 云静无言的繁体字怎样写 喷水壶一般南宁哪里有卖 信阳市哪有卖喷壶? 济南阳光100周边哪有卖喷壶? 苹果电脑一体机下图哪个口是视频输出口,我想连接到投影仪怎么连接,叫什么, 染发颜色夏季掉得快吗 用什么产品可以固色 我想问一下国债逆回购算市值吗? 世界抗癌日是哪一天? 电磁炉多大声音才算正常声音 电磁炉的正常声音是? 新买的美的电磁炉噪音太大了,正常吗 施乐1810载体运行代码 施乐s1810提示045313 EL7470固态硬盘支持pcle协议吗 7代i5 7300HQ处理器8G内存256G固态硬盘GTX1060独立显卡6G显存这个配置带的动lo 笔记本是电脑华硕CPU是酷睿i5 3230m,显卡是英伟达gt720m 内存仅仅只有2G 玩LO 左附件,右附件正常大小 知道怎么定位找人,通过对方追踪定位对方位置 喵喵机如何充电才正确,为什么喵喵机充不进电 打不死的“小强”!运营商短信业务或将崛起 供电局面试自我介绍范文