【五】阿伟开始学Kafka

news2024/11/23 4:31:18

阿伟开始学Kafka

概述

        人生若只如初见,阿伟心里回想起了第一次和Kafka见面的场景,记忆虽然已经有些模糊,但是感觉初次见面是美好的。积累了一些实战经验之后,阿伟感觉不能再是面对百度开发了,于是决心系统的学习一下Kafka。本文将作为开篇开启Kafka系列学习心得总结文章。

一、基本概念

        本节将汇总讲解一下Kafka的核心概念,对于初学者来说,学习一项技术先要做一些整体的了解,于是阿伟对Kafka核心概念进行了梳理.

核心概念

1、Topic

Kafka根据topic对消息进行归类,发布到Kafka集群的每条消息都需要指定一个topic

2、Parition

物理上的概念,一个topic可以分为多个partition,每个partition的内部时有序的

3、Broker

消息中间件处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群

4、ConsumerGroup

每个Consumer属于一个特定的ConsumerGroup,一条消息可以被多个不同的ConsumerGroup消费,到那时一个ConsumerGroup中只能有一个Consumer能够消费该消息

5、Consumer

消息消费者,从Broker读取消息的客户端

6、Producer

消息生产者,向Broker发送消息的客户端

消息类型

普通消息、顺序消息、延时消息

消费模式

集群消费、广播消费

二、市面上流行的消息中间件特性对比

如下将市面上流行的几款消息中间件Kafka、RocketMQ、RabbitMQ进行了多维度的对方分析:

        

三、Kafka难题

1、为什么要对topic下数据进行分区存储?

1.commit log文件会受到所在机器的文件系统大小的限制,分区之后可以将不同的分区放在不同的机器上,相当于对数据做了分布式存储,理论上一个topic可以处理任意数量的数据
2.提高并行度

2、如何在多个partition中保证顺序消费?

方案一:首先将需要保证顺序的消息收集起来,然后交给一个consumer去进行处理,然后内部维护一个线程池,让其中某一个线程去顺序执行这些消息eg:用户下单流程,支付成功消息 -> 库存消息
方案二:让多个消息构造一个特殊结构的顺序消息,当consumer收到时,在一个线程中依次进行消费

3、消息丢失

1、生产者

1.1、acks=0,表示producer不需要等待任何broker确认收到消息的回复,就可以发送下一条消息,性能最高,但是最容易丢消息大数据统计报表场景,对性能要求很高,对数据丢失不敏感的情况可以用这种

1.2、acks=1,表示至少要等待leader已经成功将数据写入本地log,但是不需要等待所有follower是否成功写入,就可以继续发送下一条消息,这种情况下,如果follower没有成功备份数据,而此时leader又挂掉,则消息会丢失

1.3、ack=-1或者all,这意味着leader需要等待所有备份(min.insync.replicas配置的备份个数)都成功写入日志,这种策略会保证只要由一个备份存活就不会丢失数据,这是最强的数据保证,一般除非是金融级别,或跟钱打交道的场景才会使用这种配置,当然如果min.insync.replicas配置的是1则也可能丢消息,跟acks=1情况类似

2、消费者

如果消费这边配置的是自动提交,万一消费到数据还没处理完,就自动提交offset了,但是此时consumer直接宕机了未处理完的数据丢失了,下次也消费不到了

4、消费重复

1、生产者

发送消息如果配置了重试机制,比如网络抖动事件过长导致发送端发送超时,实际broker可能已经接收到消息,但发送方会重新发送消息

2、消费者

如果消费这边配置的是自动提交,刚拉取了一批数据处理了一部分,但还没来得及提交,服务挂了,下次重启又会拉取相同的一批数据重复处理一般消费端都是要做消息幂等处理的

5、消息乱序

1、如果发送端配置了重试机制,Kafka不会等之前那条消息完全成功了才去发送下一条消息,这样就可能出现发送了1,2,3条2消息,第一条超时了,后面两条发送成功,再重试发送第一条消息,这时消息在broker端的顺序就是2,3,1了,所以,是否一定要配置重试要根据业务情况而定。也可以用同步发送的模式取发消息,当然acks不能设置为0,这样也能保证消息从发送端到消费端全链路有序,kafka保证全链路消息顺序消费,需要从发送端开始,将所有有序消息发送到同一个分区,然后用一个消费者去消费,但是这种性能比较低,可以在消费者端接收到消息后将需要保证顺序消费的几条消息发到内存队列(可以多搞几个),一个内存队列开启一个线程顺序消费处理。

2、一个parition同一时刻在一个consumer group中只能有一个consumer实例在消费
,从而保证消费顺序。consumer group中的consumer数量不能比一个topic中的partion数量还要多,否则多出来的consumer消费不到消息。Kafka只在parition的范围内保证消息消费的局部顺序性,不能在同一个topic中的多个partition中保证总的消费性如果有在总体上保证消费顺序的需求,那么我们可以通过将topic的partition数量设置为1,将consumer group中的consumer instance数量也设置为1,但是这样会影响性能,所以kafka的顺序消费很少用。

6、消息积压

1.线上有时因为发送方发送消息速度过快,或者消费放处理消息过慢,可能会导致broker挤压大量未消费消息,此种情况如果挤压了上百万未消费消息需要紧急处理,可以修改消费端程序,让其将收到地消息快速转发到其他topic(可以设置很多分区),然后再启动多个消费者同时消费新主题地不同分区。

2.由于消息数据格式变动或者消费者程序有bug,导致消费者一直消费不成功,也可能导致broker积压大量未消费消息.此种情况可以将这些消费不成功地消息转发到其他队列里去(类似死信队列),后面再慢慢分析死信队列里地消息处理问题。

总结

        本文阿伟结合自己的理解从几个方面梳理了Kafka,其中讲到了基本概念,市面上消息中间件的对比,以及Kafka在实际应用中会遇到一些问题点和处理思路。

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

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

相关文章

数据库MySQL之事务、索引

目录 1.概述 2.事务 3.索引 3.1索引结构 3.2操作语法 1.概述 场景:假如我们需要解散教学部,那么该部门下的所有员工都需要删除。如果教学部成功删除了,但员工出于某些原因(比如SQL语句写错了等)并没有删除,此时就会出现数据…

Node 网络详解

Node 网络详解 1、 OSI & TCP/IP模型设计1.1 OSI七层模型应用层:(Application Layer)表示层:(Presentation Layer)会话层:(Session Layer)传输层:&#x…

Mycat分片-水平拆分

目录 场景 准备 配置 测试 续接上篇:Mycat分片-垂直拆分-CSDN博客 场景 在业务系统中, 有一张表(日志表), 业务系统每天都会产生大量的日志数据 , 单台服务器的数据存 储及处理能力是有限的, 可以对数据库表进行拆分。 准备 准备三台服务器,具体的结…

2024年Google开发者大会:AI赋能的Web、移动和云开发

一、大会概览 1.1 开幕与主题演讲 在北京国家会议中心举办的2024年Google开发者大会,是一场汇聚了全球顶尖开发者和技术爱好者的盛会。大会的开幕由Google大中华区总裁陈俊廷先生的主题演讲引领,他不仅回顾了中国开发者在全球技术舞台上的卓越表现&…

华硕飞行堡垒键盘全部失灵【除电源键】

华硕飞行堡垒FX53VD键盘全部失灵【除电源键】 前言一、故障排查二、发现问题三、使用方法总结 前言 版本型号: 型号 ASUS FX53VD(华硕-飞行堡垒) 板号:GL553VD 故障情况描述: 键盘无法使用,键盘除开机键外…

小型无人机训练与运用技术研究

1. 基础理论与概念 小型无人机(Small Unmanned Aerial Vehicle, sUAV)作为近年来快速发展的技术领域,其基础理论与概念是理解其全貌的基石。小型无人机通常指质量轻、尺寸小、易于携带和操作的无人飞行器,广泛应用于航拍、环境监…

基于yolov5 红绿灯交通检测,可对道路红绿灯进行检测可根据界面信息直接上传图片,视频等

模型训练:使用特定的数据集来训练YOLOv5模型以准确识别红绿灯。Web界面:构建一个用户友好的Web界面,让用户能够轻松上传图片或视频进行检测。性能优化:针对实时应用进行性能优化,确保检测速度足够快。部署:…

【高级IO-1】探索五种 I/O 模型及其高级I/O技术:基于 fcntl() 的代码应用

文章目录 1. 五种IO模型2. 高级IO的重要概念2.1 同步通信 与 异步通信2.2 阻塞与非阻塞2.3 如何理解四者间的关系? 3. 其他高级IO3.1 非阻塞 I/O3.2 纪录锁(Record Lock)3.3 系统 V 流机制3.4 I/O 多路复用(I/O Multiplexing&…

自养号测评技术:如何挑选适合的IP环境方案

市面上的IP服务及常见问题 当前市场上常见的IP服务包括911、Luminati、Google Fi、TM流量卡、Socks专线等。这些服务在为用户提供网络代理或VPN服务时,常会遇到以下主要问题: 1. 高负载与重复率高:由于使用人数众多,导致网络拥堵…

投入式水位计的测量精度和稳定性如何保证

投入式水位计作为水位监测的重要工具,其测量精度和稳定性直接关系到数据的准确性和可靠性。在实际应用中,多种因素会影响投入式水位计的测量精度和稳定性,了解这些因素并采取相应的措施,是确保测量准确性的关键。 1、环境因素 温度…

Tomca安装和配置教程

目录 一.背景: 二.下载和安装Tomcat: 三.配置Tomcat环境变量 四.检查Tomcat安装成功 一.背景: Tocamt是Apache软件基金会(Apache Software Fouondation)的jakarta项目中的一个核心项目,由Apache、Sun以及其他一些公司及个人共同开发而成。Tocmat是一…

微服务⽹关

微服务网关(API Gateway)是微服务架构中的一个重要组成部分,它充当客户端与后端服务之间的单一入口。API网关负责处理所有的出入请求,提供集中式的安全、路由、负载均衡、监控等功能。 主要功能: 请求路由&#xff1a…

【JAVA】阿里巴巴 EasyExcel:高效的Excel处理解决方案

文章目录 EasyExcel1. EasyExcel 简介1.1 主要特点1.2 依赖配置 2. EasyExcel 核心功能2.1 写入 Excel 文件2.2 读取 Excel 文件 3. 业务开发示例3.1 用户数据导出3.2 用户数据导入 4. 进阶用法4.1 自定义转换器4.2 自定义格式 更多相关内容可查看 附官网地址:https…

Directory Opus 添加管理员获得所有权右键菜单

Directory Opus 添加管理员获得所有权右键菜单 在windows的资源管理器中添加管理员获得所有权的右键菜单很容易,通过注册表就可以了. 但是在Directory Opus需要另外的操作方式, 点击设置->文件类型: 选择运行DOpus函数,因为我的资源管理器已经有这个右键了,就选这个: …

营运管理系统应用架构设计

集中营运系统2020年1月《银行业集中营运规范(JR/T0173-2020号)》标准由全国金融标准化技术委员会审查通过,并由中国人民银行作为银发〔2020〕10号文件正式发布。集中运营的建设核心应该围绕多元化作业和运营能力共享两大方面服务。集中营运的系统建设方向如图10-01所示。 图…

ARP协议分析

目录 实验设备和环境 实验记录 1、ARP报文分析 (1)建立实验拓扑 (2)设置抓包接口 (3)启动设备,开始抓包 (4)协议分析 ARP代理 (1)建立实…

如何科学设定短信群发频率

在利用短信群发作为营销策略时,平衡好发送频率至关重要。过于频繁的短信可能招致客户反感甚至被屏蔽,而发送不足则可能导致品牌信息被遗忘。因此,精准把握短信群发频率,是提升客户体验与品牌记忆度的关键。以下是几个常见行业短信…

YOLOv5改进 | 模块融合 | C3融合可变形自注意力模块【模块缝合】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录: 《YOLOv5入门 改…

豆瓣评分8.7!Python pandas创始人亲码的数据分析入门手册!

在众多解释型语言中,Python最大的特点是拥有一个巨大而活跃的科学计算社区。进入21世纪以来,在行业应用和学术研究中采用python进行科学计算的势头越来越猛。 近年来,由于Python有不断改良的库(主要是pandas),使其成为数据处理任…

原神单机版【无脑一键搭建】纯单机*非私服*稳定版*

版本介绍 版本3.7、4.0、4.0、4.4、4.5、4.6稳定版【过分追新并不稳,合理才完美】 独家原神,游戏内自带剧情任务,完美仿官,一比一完美复制! 已经拥有完美剧情、任务、副本、卡池、深渊、全物品、和全部功能和皮肤。 …