Kafka 记录

推荐资源

官网http://kafka.apache.org/
Githubhttps://github.com/apache/kafka
书籍《深入理解Kafka 核心设计与实践原理》

Kafka 架构

Kafka使用ZooKeeper作为其分布式协调框架,其动态扩容是通过ZooKeeper来实现的。Kafka使用Zookeeper保存broker的元数据和消费者信息。Kafka元数据信息包括如代理节点信息、Kafka集群信息、旧版消费者信息及其消费偏移量信息、主题信息、分区状态信息、分区副本分配方案信息、动态配置信息等。Kafka在启动或运行过程当中会在ZooKeeper上创建相应节点来保存元数据信息,Kafka通过监听机制在这些节点注册相应监听器来监听节点元数据的变化,从而由ZooKeeper负责管理维护Kafka集群,同时通过ZooKeeper我们能够很方便地对Kafka集群进行水平扩展及数据迁移。后面新版本有KRaft(Kafka Raft)代替Zookeeper。

Kafka Ecosystem 生态系统 

Kafka 核心概念

Topic

Topic:特指Kafka处理的消息源的不同分类。

Kafka的消息通过主题进行分类。(主题好比数据库中的表,或者文件系统里的文件夹)主题可以被分为若干个分区。一个分区就是一个提交日志。一个主题一般包含几个分区,因此无法在整个主题范围内保证消息的顺序,但可以保证消息在单个分区内的顺序,消息以追加的方式写入分区,然后以先入先出(消息队列)的顺序读取。为了提高效率,消息被分批次写入Kafka。批次就是一组消息,这些消息属于同一个主题(topic)和分区(Partition)。消息由字节数组组成。

Partition

Partition:Topic物理上的分组,一个Topic可以分为多个Partition,每个Partition是一个有序的队列。Partition中的每条消息都会被分配一个有序的id。

每个主题对应的分区数可以在Kafka启动时所加载的配置文件中配置,也可以在创建主题时指定。当然,客户端还可以在主题创建后修改主题的分区数。

分区使得Kafka在并发处理上变得更加容易,理论上来说,分区数越多吞吐量越高,但这要根据集群实际环境及业务场景而定。同时,分区也是Kafka保证消息被顺序消费以及对消息进行负载均衡的基础。

Kafka只能保证一个分区之内消息的有序性,并不能保证跨分区消息的有序性。每条消息被追加到相应的分区中,是顺序写磁盘,因此效率非常高,这是Kafka高吞吐率的一个重要保证。同时与传统消息系统不同的是,Kafka并不会立即删除已被消费的消息,由于磁盘的限制消息也不会一直被存储(事实上这也是没有必要的),因此Kafka提供两种删除老数据的策略,一是基于消息已存储的时间长度,二是基于分区的大小。

由于Kafka副本的存在,就需要保证一个分区的多个副本之间数据的一致性,Kafka会选择该分区的一个副本作为Leader副本,而该分区其他副本即为Follower副本,只有Leader副本才负责处理客户端读/写请求,Follower副本从Leader副本同步数据。如果没有Leader副本,那就需要所有的副本都同时负责读/写请求处理,同时还得保证这些副本之间数据的一致性,

Message

Message:消息,是通信的基本单位。每个Producer可以向一个Topic(主题)发布一些消息。

Kafka的数据单元被称为消息。(可以把消息看成是数据库里的一个“数据行”或“记录”)

Producer

Producer:消息和数据生产者。向Kafka的一个Topic发布消息的过程叫作Producer。

Consumer

Consumer:消息和数据消费者。订阅Topics并处理其发布的消息的过程叫作Consumer。

Broker

Broker:缓存代理。Kafka集群中的一台或多台服务器统称为Broker。一台Kafka服务器就是一个Broker。一个集群由多个Broker组成,一个Broker可以容纳多个Topic。

Kafka集群就是由一个或多个Kafka实例构成,我们将每一个Kafka实例称为代理(Broker),通常也称代理为Kafka服务器(KafkaServer)。在生产环境中Kafka集群一般包括一台或多台服务器,我们可以在一台服务器上配置一个或多个代理。每一个代理都有唯一的标识id,这个id是一个非负整数。在一个Kafka集群中,每增加一个代理就需要为这个代理配置一个与该集群中其他代理不同的id, id值可以选择任意非负整数即可,只要保证它在整个Kafka集群中唯一,这个id就是代理的名字,也就是在启动代理时配置的broker.id对应的值。发布与订阅系统一般有一个broker,也就是发布消息的中心点。

Broker默认的消息保留策略是这样的:要么保留一段时间(比如7天),要么保留到消息达到一定大小的字节数(比如1GB)。

Relationship Overview for Broker, Producer, Consumer, Topic, Topic Partition, Replicas, Leader and Follower

ISR & OSR

Log End Offset & WAL

ack

There are two settings here that affect the producer:

  • acks - this is a producer-level setting
  • min.insync.replicas - this is a topic-level setting

The acks property determines how you want to handle writing to kafka:

acks=0 - I don't care about receiving acknowledgment of receipt 

acks=1 - Send an acknowledgment when the leader partition has received the batch in memory

all/-1 - Wait for all replicas to receive the batch before sending an acknowledgment 

Kafka Producer Architecture and Workflow

Java code

Producer:

Consumer:

如果处理重复消息

幂等处理重复消息
幂等是数学上的概念,我们就理解为同样的参数多次调用同一个接口和调用一次产生的结果是一致的。例如这条 SQL:update t1 set money = 150 where id = 1 and money = 100; 执行多少遍 money 都是150,这就叫幂等。
因此需要改造业务处理逻辑,使得在重复消息的情况下也不会影响最终的结果。

1. 前置条件判断
可以通过像上面 SQL 一样,做个前置条件判断,即 money = 100,并且直接修改;更通用的是做个 version 即版本号控制,对比消息中的版本号和数据库中的版本号。

2. 通过数据库的约束例如唯一键,例如 insert into update on duplicate key ... 

3. 记录关键的key,例如处理订单,记录订单ID,假如有重复的消息过来,先判断下这个ID是否已经被处理过了,如果没处理再进行下一步。当然也可以用全局唯一ID等。

基本上就这么几个方式,真正应用到实际中还是得看具体业务细节。

如何保证消息不丢失

如何保证消息的有序性

消息队列的推拉模式

Kafka Admin (Setup, Operation, Monitoring)

(后续再整理)

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

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

相关文章

AI大语言模型学习笔记之三:协同深度学习的黑魔法 - GPU与Transformer模型

Transformer模型的崛起标志着人类在自然语言处理(NLP)和其他序列建模任务中取得了显著的突破性进展,而这一成就离不开GPU(图形处理单元)在深度学习中的高效率协同计算和处理。 Transformer模型是由Vaswani等人在2017年…

vio参数文件内相机imu参数的修改

imu标定工具 https://github.com/mintar/imu_utils网络上有各种IMU校准工具和校准教程,曾经花费了巨大精力跟着各种教程去跑校准。 然而,标定使用的数据都是在静止状态下录制的,我们在使用vio或者imu-cam联合标定的时候,imu确是处…

EF Core入门例子(以SqLite为数据库)

测试环境: visual studio 2017 .net core 2.1 具体步骤如下: 1 新增名称为EFCoreDemo的.net core控制台程序,版本选择.net core 2.1,项目不能放到带中文的目录下,不然到后面执行Add-Migration命令时会报如下的错误…

【数据结构】(二)线性表List

目录 1、基本概念 2、栈(Stack) 3、队列(Queue) 4、串(String) 1、基本概念 (1)线性表是零或多个数据元素的有限序列。 (2)数组长度指存储空间长度&…

android 网络拦截器统一处理请求参数和返回值加解密实现

前言 项目中遇到参数加密和返回结果加密的业务 这里写一下实现 一来加深记忆 二来为以后参考铺垫 需求 项目在开发中涉及到 登陆 发验证码 认证 等前期准备接口 这些接口需要单独处理 比如不加密 或者有其他的业务需求 剩下的是登陆成功以后的业务需求接口 针对入参和返回值…

软件功能测试如何确定测试需求?CMA、CNAS软件测试报告获取

软件功能测试是为了验证软件的功能是否按照设计要求正常工作的过程,可以确保软件的质量,提高用户体验,也是保证软件安全和可靠性的重要一环。我们需要从多个角度对软件的各个功能模块进行测试,确保每个功能都能正常运行&#xff0…

069:vue中EventBus的使用方法(图文示例)

第069个 查看专栏目录: VUE ------ element UI 本文章目录 示例背景示例效果图示例源代码父组件:子组件A:子组件B:eventbus/index.js: EventBus的基本使用方法: 示例背景 在Vue中,使用EventBus可以实现组件…

Python||五城P.M.2.5数据分析与可视化_使用华夫图分析各个城市的情况(上)

目录 五城P.M.2.5数据分析与可视化——北京市、上海市、广州市、沈阳市、成都市,使用华夫图分析各个城市的情况 1.北京市的空气质量 2.广州市的空气质量 【上海市和成都市空气质量情况详见下期】 五城P.M.2.5数据分析与可视化——北京市、上海市、广州市、沈阳市、成…

红日三打靶!!!

红日三,黑盒测试 环境搭建一.外网打点1.网段探测2.端口服务扫描3.目录扫描4.网站漏洞扫描5.汇总,找破绽6.登陆MySQL改密码 7.进入后台,找能写马的地方8.蚁剑连接9.disable_functions绕过1.蚁剑插件绕过2.bypass_disablefunc_via_LD_PRELOAD绕…

深兰科技陈海波出席CTDC2024第五届首席技术官领袖峰会:“民主化AI”的到来势如破竹

1月26日,CTDC 2024 第五届首席技术官领袖峰会暨出海创新峰会在上海举行。深兰科技创始人、董事长陈海波受邀出席了本届会议,并作为首个演讲嘉宾做了题为“前AGI时代的生产力革命范式”的行业分享。 作为国内顶级前瞻性技术峰会,CTDC首席技术官…

【数据结构 06】二叉树

一、原理 二叉树算法核心思维:递归 满二叉树:二叉树的层数为K,节点数为 完全二叉树:二叉树的层数为K,前K-1层是满的,第K层是连续的 满二叉树是完全二叉树的子集。 任意二叉树:若叶子节点的…

2024-01-07-AI 大模型全栈工程师 - 做自己的产品经理

摘要 2024-01-07 周日 杭州 阴 本节内容: a. 如何做好独立开发设计,实现财富自由; 课程内容 1. 独立开发者 英文 indie hacker,是指独立开发软件产品的人;一人承担一个项目产品的所有工作; 2. 创业机会 云计算设…

学习使用Flask模拟接口进行测试

前言 学习使用一个新工具,首先找一段代码学习一下,基本掌握用法,然后再考虑每一部分是做什么的 Flask的初始化 app Flask(__name__):初始化,创建一个该类的实例,第一个参数是应用模块或者包的名称 app…

Java宝典-数据类型

目录 1.变量与常量2.Java中的数据类型3.整型3.1 字节型byte3.2 短整型short3.3 整型int3.4 长整型long 4.浮点型4.1 单精度浮点型float4.2 双精度浮点型double 5.字符型6.布尔型7.类型转换7.1 隐式类型转换7.2 显示类型转换(强制类型转换) 8.类型提升 大家好,我是你们的Vampire…

华为数通方向HCIP-DataCom H12-821题库(单选题:401-420)

第401题 R1的配置如图所示,此时在R1查看FIB表时,关于目的网段192.168.1.0/24的下跳是以下哪一项? A、10.0.23.3 B、10.0.12.2 C、10.0.23.2 D、10.0.12.1 【答案】A 【答案解析】 该题目考查的是路由的递归查询和 RIB 以及 FIB 的关系。在 RIB 中,静态路由写的是什么,下…

PPT录屏功能在哪?一键快速找到它!

在现代办公环境中,ppt的录屏功能日益受到关注,它不仅能帮助我们记录演示文稿的播放过程,还能将操作过程、游戏等内容完美录制下来。可是很多人不知道ppt录屏功能在哪,本文将为您介绍ppt录屏的打开方法,以帮助读者更好地…

网络原理TCP/IP(2)

文章目录 TCP协议确认应答超时重传连接管理断开连接 TCP协议 TCP全称为"传输控制协议(Transmission Control Protocol").⼈如其名,要对数据的传输进⾏⼀个详细 的控制; TCP协议段格式 • 源/目的端口号:表⽰数据是从哪个进程来,到哪个进程去; • 32位序号/32位确认…

spring问题点

1.事务 1.1.事务传播 同一个类中 事务A调非事务B B抛异常 AB事务生效(具有传播性) 同一个类中 事务A调非事务B A抛异常 AB事务生效 也就是主方法加了事务注解 则方法内调用的其他本类方法无需加事务注解, 发生异常时可以保证事务的回滚 最常…

day07-CSS高级

01-定位 作用:灵活的改变盒子在网页中的位置 实现: 1.定位模式:position 2.边偏移:设置盒子的位置 left right top bottom 相对定位 position: relative 特点: 不脱标,占用自己原来位置 显示模…

跟着cherno手搓游戏引擎【14】封装opengl

本节先把代码粘上,后续会慢慢把注释都给加上,先看代码了解个大概(待更新) 前置: RendererAPI.h: #pragma once namespace YOTO {enum class RendererAPI {None 0,OpenGL1};class Renderer {public:inline static R…