Kafka入门

kafka无疑是当今互联网公司使用最广泛的分布式实时消息流系统,它的高吞吐量,高可靠等特点为并发下的大批量实时请求处理提供了可靠保障。很多同学在项目中都用到过kafka,但是对kafka的设计原理以及处理机制并不是十分清楚。为了知其然知其所以然,本文主要从三个方面介绍kafka,第一,kafka简介以及适用场景,第二,kafka设计原理,三,常见问题及思考。

一、kafka简介及适用场景

**kafka官网上对 kafka 的定义:**一个分布式发布-订阅消息传递系统。主要特点包括高吞吐量、持久化(消息持久化到磁盘,支持批量和实时处理)、可扩展性、容错性。

kafka 相关术语:

Message(消息):基本数据单元(key-value形式)。为了提高效率,消息被分批次写入 kafka。批次就是一组消息,这些消息属于同一个Topic和Partition。

Topic(主题):每条消息都有一个类别,这个类别被称为 Topic。Topic类似于数据库的表或者一个文件夹,物理上不同 Topic 的消息分开存储。

Partition(分区):每个 Topic 包含一个或多个 Partition。Partition是物理概念,通常,一个Topic的消息被均匀地分发到每个partition,以追加的方式写入,先入先出的顺序读取。注:由于一个主题一般包含几个分区,因此无法在整个主题范围内保证消息的顺序,但可以保证消息在单个分区的顺序。

Offst(偏移量):单个分区中的每一条消息都被分配一个 Offset,它是一个单调递增的整型数,可用来作为分区中消息的唯一标识符。

Broker(缓存代理):kafka 集群包含一个或多个服务器,这种服务器被称为 broker。不维护任何消息的状态。

Producer(生产者):负责发布消息到 kafka broker。

Consumer(消费者):消息消费者,向 kafka broker 读取消息的客户端。

Consumer Group(消费组):每个 Consumer 属于一个特定的 Consumer Group。注:一个分区消息只能被一个Consumer Group中的一个Consumer消费。一个Consumer可以消费多个Topic的消息。每个Group中Consumer消息消费独立。具体理解见下图,第三部分的常见问题2给出了解释。

kafka使用场景

1)push发送

2)高吞吐量

3)可以作为大缓冲区使用

4)Hadoop或传统的数据仓库中存储消息用于离线分析

5)nginx日志收集

二、kafka设计原理

一个简单的kafka集群架构如下图所示

从图中可以看到,生产者将数据发送(push)到Broker代理,Broker代理有多个topic,消费者主动从Broker获取(pull)数据。为什么采取Broker拉去数据的方式,下面的思考问题会给出答案。在发送,拉去过程中kafka的一些机制如下。

1、Message-partition的分配机制

1)Key不为空时:对key进行hash后对分区数量取余运算,保证了同一个key会被分到同一个分区。

2)key为空,则进行轮询发送。

2、kafka 默认的消息保留策略

要么保留一段时间,要么保留到到消息达到一定大小的字节数。

**3、kafka消息处理机制 **

1) 发送到partitions中的消息将会按照它接收的顺序追加到日志中。

2)对于消费者而言,它们消费消息的顺序和日志中消息顺序一致。

3)如果Topic的“replication factor”(复制因子)为N,那么允许N-1个kafka实例失效,比如3副本的设置允许2个副本失效。

4)kafka提供at-least-once(至少一次) delivery,即当consumer宕机后,有些消息可能会被重复delivery。

5)因每个partition只会被consumer group内的一个consumer消费,故kafka保证每个partition内的消息会被顺序的消费。

6)ack校验,当消费者消费成功,返回ack信息。

三、常见问题及思考

1、为什么Broker为什么不主动推送消息,然后保存消息状态为已消费?

Broker推送消息的方式无法很好地保证消费的处理语义。比如当我们已经把消息发送给消费者之后,由于消费进程挂掉或者由于网络原因没有收到这条消息,如果我们在消费代理将其标记为已消费,这个消息就永久丢失了。kafka 采取拉取模型(pull),由自己控制消费速度,以及消费的进度,消费者可以按照任意的偏移量进行消费。比如消费者可以消费已经消费过的消息进行重新处理,或者消费最近的消息。

2、为什么一个分区消息只能被一个消费组中的一个消费者消费?

我们可以假设同一个消费组中的消费者1 已经消费了1-10,那么该分区的消费index 需要移动到10的位置。当同一个消费组中的消费者2希望消费10-20时,index再继续进行移动。

问题1我们已经了解了broker维护消息状态的以及索引的弊端。那么就需要在consumer端进行多个index维护,那么就得引入中心的概念,大家都在中心去获得当前的index,这会增加复杂性。因此,虽然牺牲了分区的分布式消费。但是因为可以有多个分区,也是一个比较合理的方案。

3、为什么发送了消息,接收端确没有收到消息?

a、确认发送方和接收方配置的topic是否一致;

b、确认发送方和接收方配置的kafka集群是否一致(jps命令查看集群是否启动)

c、确认发送方和接收方配置的是不是同一个partition;

d、查看时间戳的方式确认发送方的消息是否落入到kafka的日志中;

d.1没有落入相应partition的kafka日志中(即kafka没有接收到)

1)发送方是否有特殊配置,即一定量的消息才发送到kafka中(批量发送,可设置);

2)消息没有发送成功,消息格式不正确或者kafka发送工具问题;

d.2kafka日志中(即kafka没有接收到)

1)接收端offset设置有误,导致接收不到消息;

2)接收端拉取消息出现问题

四、总结

文本简述了kafka的简介以及原理,企业在实际使用中还会有很多新的挑战

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/135773.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通达OA V12版,引入thinkphp5.1框架,及获取session

通达OA V12版,引入thinkphp5.1框架 如下过程引入如下问题,按上述问题解决htmlentities(): charset cp936 not supported, assuming utf-8 内容绝对原创,希望对您有帮助。您的打赏,是让我持续更新的牛奶和面包 如下过程引入 在D:/…

项目实战:优化Servlet,把所有围绕Fruit操作的Servlet封装成一个Servlet

1、FruitServlet 这些Servlet都是围绕着Fruit进行的把所有对水果增删改查的Servlet放到一个Servlet里面,让tomcat实例化一个Servlet对象 package com.csdn.fruit.servlet; import com.csdn.fruit.dto.PageInfo; import com.csdn.fruit.dto.PageQueryParam; import c…

uniapp u-tabs表单如何默认选中

首先先了解该组件;该组件,是一个tabs标签组件,在标签多的时候,可以配置为左右滑动,标签少的时候,可以禁止滑动。 该组件的一个特点是配置为滚动模式时,激活的tab会自动移动到组件的中间位置。 …

asp.net core mvc之路由

一、默认路由 (Startup.cs文件) routes.MapRoute(name: "default",template: "{controllerHome}/{actionIndex}/{id?}" ); 默认访问可以匹配到 https://localhost:44302/home/index/1 https://localhost:44302/home/index https:…

生产过程建模在MES管理系统中的重要性

在现代制造业中,为了提升生产效能和满足市场需求,企业纷纷引入MES管理系统解决方案。然而,要成功实施MES管理系统,首要任务是深入理解和有效管理生产过程。为此,建立一个准确且可靠的生产过程模型变得至关重要。 生产…

Web服务器实战

网站需求 1.基于域名www.openlab.com可以访问网站内容为 welcome to openlab!!! 2.给该公司创建三个网站目录分别显示学生信息,教学资料和缴费网站,基于www.openlab.com/student 网站访问学生信息,www.openlab.com/data网站访问教学资料 www…

【2021研电赛】基于深度学习的蛋白质与化合物结合性质预测

本作品介绍参与极术社区的有奖征集|分享研电赛作品扩大影响力,更有重磅电子产品免费领取! 获奖情况:三等奖 1.作品简介 针对药物发现过程中的药物筛选问题,本设计基于深度学习提出新的神经网络结构和数据处理方式用于预测蛋白质与化合物之…

更改 npm的默认缓存地址

npm的默认缓存一般在C:\Users\用户名\AppData\Roaming路径下的npm和npm_cache,而c盘往往空间不大。 1、在其他盘新建两个文件夹,如D盘,node_cache和node_global。如下图所示。 2、在cmd中执行npm config set prefix “node_cache的路径”&a…

关于AM5-DB低压备自投装置如何应用在某变电站项目的-安科瑞 蒋静

摘 要:随着电力需求的不断增加,电力系统供电可靠性要求越来越高,许多供电系统已具备两回或多回供电线路。备用电源自动投入装置可以有效提高供电的可靠性,该类装置能够在工作电源因故障断开后,自动且迅速地将备用电源投…

什么是进销存系统?有哪些流程?

这篇给大家详细介绍一下,到底什么是进销存系统,它的发展历程如何?企业该如何利用进销存系统获得竞争优势? 至于为什么越来越多的企业都选择进销存系统,让我们先来看一下这个实例。 假设有一家零售超市,他…

目标跟踪(DeepSORT)

本文首先将介绍在目标跟踪任务中常用的匈牙利算法(Hungarian Algorithm)和卡尔曼滤波(Kalman Filter),然后介绍经典算法DeepSORT的工作流程以及对相关源码进行解析。 目前主流的目标跟踪算法都是基于Tracking-by-Detec…

PBJ | IF=13.8 利用ChIP-seq和ATAC-seq技术揭示MdRAD5B调控苹果耐旱性的双重分子作用机制

2023年10月24日,西北农林科技大学园艺学院管清美教授团队在Plant Biotechnology Journal(最新IF:13.8)上发表题为“The chromatin remodeller MdRAD5B enhances drought tolerance by coupling MdLHP1-mediated H3K27me3 in apple…

计算机网络期末复习-Part1

1、列举几种接入网技术:ADSL,HFC,FTTH,LAN,WLAN ADSL(Asymmetric Digital Subscriber Line):非对称数字用户线路。ADSL 是一种用于通过电话线连接到互联网的技术,它提供…

安卓系统手机便签app使用哪一款?

在现代快节奏的生活中,我们经常会遇到各种繁忙的事务和容易遗忘的备忘事项。为避免大家遗忘重要的事情,大家可以在常用的手机上安装记录备忘事项的工具,为了帮助安卓用户高效地记录和管理这些信息,今天我将向大家推荐一款功能强大…

关于炒股融资的条件,3个你不知道的小知识

随着投资者对股市的关注度不断提高,炒股融资成为了常见的投资方式,但是很多投资者对炒股融资的条件了解不够。下面给大家介绍三个你可能不知道的小知识。 融资比例的计算方式 融资比例指的是投资者可以借的资金比例,其计算方式是融资金额除以…

uniapp小程序接入腾讯云【增强版人脸核身接入】

文档地址:https://cloud.tencent.com/document/product/1007/56812 企业申请注册这边就不介绍了,根据官方文档去申请注册。 申请成功后,下载【微信小程序sdk】 一、解压sdk,创建wxcomponents文件夹 sdk解压后发现是原生小程序代…

程序员副业之路,今天花几分钟提现了18.1元,感觉认真做收益还是不错的

干客户端这么多年了,越来越觉得力不从心了,以前加班到半夜,睡一觉第二天又生龙活虎继续干,现在时常感叹:年轻就是好呀,有使不完的劲,就像下面这位兄弟这样,跪着都能给你把代码写完。…

Halcon如何使用SaperaLT库连接dalsa相机

halcon安装好的时候,没有带SaperaLT的采集库,需要额外在Halcon官网下载此库。 以下是halcon官网下载此库的链接。官网需要注册才可以下载。 https://www.mvtec.com/downloads/interfaces?tx_mvtecproduct_extensiondownloadlist%5Bfilter%5D%5B0%5Dma…

CC1101 一款低功耗sub- 1ghz收发器芯片 适用于无线遥控智能家居

产品描述 CC1101是一个低成本的sub- 1ghz收发器,专为极低功耗的无线应用而设计。 该电路主要用于工业、科学和医学)和SRD (Short Range Device)频带,在315,433,868和915兆赫,但可以轻松可编程用于其他操作频率在300-348 MHz、387-464 MHz,以及779-928 MHz频段。射…

Vulnhub靶场之Funbox

正如该靶场的描述所说,它对初学者来说非常简单。 项目地址:Funbox: Scriptkiddie ~ VulnHub 所需工具: KaliLinux即可。 0x00 信息收集 打开虚拟机后使用nmap扫描一下网段存活,这里我给的虚拟机的范围是100-253,其中kali的IP是10…