kafka-4 生产者和消费者

kafka的生产者和消费者

  • 四、 生产者
    • 4.1 分区分配策略
    • 4.2 副本和消息消费
      • 4.2.1 副本(AR、ISR、OSR)
      • 4.2.2 HW与LEO
      • 4.2.3 ISR 集合和 HW、LEO的关系
  • 五、消费者
    • 5.1 分区分配策略
    • 5.2 消费者offset的存储

四、 生产者

4.1 分区分配策略

(1)分区的原因

  • 方便在集群中扩展:每个partition通过调整以适应它所在的机器,而一个Topic又可以有多个partition组成,因此整个集群可以适应适合的数据。
  • 可以提高并发:以Partition为单位进行读写。类似于多路。

(2)分区的原则

  • 指明partition(这里的指明是指第几个分区)的情况下,直接将指明的值作为partition的值。
  • 没有指明partition的情况下,但是存在值key,此时将key的hash值与topic的partition总数进行取余得到partition值。
  • 值与partition均无的情况下,第一次调用时随机生成一个整数,后面每次调用在这个整数上自增,将这个值与topic可用的partition总数取余得到partition值,即round-robin算法。

4.2 副本和消息消费

4.2.1 副本(AR、ISR、OSR)

(1)AR:Assigned Replicas,某分区的所有副本(这里所说的副本包括leader和follower)统称为 AR。

(2)ISR:In Sync Replicas,所有与leader副本保持"一定程度同步"的副本(包括leader副本在内)组成 ISR 。生产者发送消息时,只有leader与客户端发生交互,follower只是同步备份leader的数据,以保障高可用,所以生产者的消息会先发送到leader,然后follower才能从leader中拉取消息进行同步,同步期间,follower的数据相对leader而言会有一定程度的滞后,前面所说的"一定程度同步"就是指可忍受的滞后范围,这个范围可以通过server.properties中的参数进行配置。

(3)OSR :Out-of-Sync Replied,在上面的描述中,相对leader滞后过多的follower将组成OSR 。由此可见,AR = ISR + OSR,理想情况下,所有的follower副本都应该与leader 保持一定程度的同步,即AR=ISR,OSR集合为空。

leader负责跟踪维护 ISR 集合中所有follower副本的滞后状态,当follower副本"落后太多" 或 "follower超过一定时间没有向leader发送同步请求"时,leader副本会把它从 ISR 集合中剔除。如果 OSR 集合中有follower副本"追上"了leader副本,那么leader副本会把它从 OSR 集合转移至 ISR 集合。

上面描述的"落后太多"是指follower复制的消息落后于leader的条数超过预定值,这个预定值可在server.properties中通过replica.lag.max.messages配置,其默认值是4000。“超过一定时间没有向leader发送同步请求”,这个"一定时间"可以在server.properties中通过replica.lag.time.max.ms来配置,其默认值是10000。

默认情况下,当leader发生故障时,只有 ISR 集合中的follower副本才有资格被选举为新的leader,而在 OSR 集合中的副本则没有任何机会。

4.2.2 HW与LEO

(1)HW
HW (High Watermark)俗称高水位,它标识了一个特定的消息偏移量(offset),消费者只能消费HW之前的消息。

(2)LEO
LEO (Log End Offset),标识当前日志文件中下一条待写入的消息的offset。图4.1中offset为9的位置即为当前日志文件的 LEO,分区 ISR 集合中的每个副本都会维护自身的 LEO ,而 ISR 集合中最小的 LEO 即为分区的 HW,对消费者而言只能消费 HW 之前的消息。

4.2.3 ISR 集合和 HW、LEO的关系

producer在发布消息到partition时,只会与该partition的leader发生交互将消息发送给leader,leader会将该消息写入其本地log,每个follower都从leader上pull数据做同步备份,follower在pull到该消息并写入其log后,会向leader发送ack,一旦leader收到了ISR中的所有follower的ack(只关注ISR中的所有follower,不考虑OSR,一定程度上提升了吞吐),该消息就被认为已经commit了,leader将增加HW,然后向producer发送ack。

也就是说,在ISR中所有的follower还没有完成数据备份之前,leader不会增加HW,也就是这条消息暂时还不能被消费者消费,只有当ISR中所有的follower都备份完成后,leader才会将HW后移。ISR集合中LEO最小的副本,即同步数据同步的最慢的一个,这个最慢副本的LEO即leader的HW,消费者只能消费HW之前的消息。

在这里插入图片描述
图4.1 ISR、LEO和HW的关系示意图

五、消费者

5.1 分区分配策略

一个consumer group中有多个consumer,一个topic有多个partition,所以必然会涉及到partition的分配问题,即确定那个partition由那个consumer消费的问题。Kafka的两种分配策略:

(1)round-robin循环
按照分区的字典对分区和消费者进行排序,然后对分区进行循环遍历,遇到自己订阅的则消费,否则向下轮询下一个消费者。即按照分区轮询消费者,继而消息被消费。
轮询的方式会导致每个Consumer所承载的分区数量不一致,从而导致各个Consumer压力不均。

(2)range
根据topic的分区数来进行分配,按照订阅该topic的consumer数进行平均分配,多出来的则按照consumer的字典序挨个分配。
这种方式会导致在前面的consumer得到更多的分区,导致各个consumer的压力不均衡。

5.2 消费者offset的存储

由于Consumer在消费过程中可能会出现断电宕机等故障,Consumer恢复以后,需要从故障前的位置继续消费,所以Consumer需要实时记录自己消费到了那个offset,以便故障恢复后继续消费。

(1)kafka自动保存提交
(2)消费者手动保存提交

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Webpack 实践:配置、性能优化和最佳实践

总结 通过以下的配置示例和性能优化策略,我们希望能帮助你在 Webpack 实践中获得更好的开发体验和项目性能。这里仅仅是冰山一角,Webpack 的功能还有很多等待你去探索。 在本篇文章中,我们将深入探讨 Webpack 的实践,包括配置示例…

Python 小型项目大全 71~75

七十一、声音模拟 原文:http://inventwithpython.com/bigbookpython/project71.html 类似于西蒙电子玩具,这款识记游戏使用第三方playsound模块,播放四种不同的声音,分别对应键盘上的A、S、D、F键。当你成功地重复游戏给你的图案时…

【SSL】ssl证书简介、ssl证书生成工具与ssl证书生成步骤

ssl证书简介、ssl证书生成工具与ssl证书生成步骤一、ssl证书是什么?二、ssl证书生成工具有哪些?2.1、工具一:CFSSL2.2、工具二:OpenSSL2.3、工具三:XCA三、ssl证书有什么用?四、ssl证书生成步骤4.1 步骤1&a…

6基于二阶锥规划的主动配电网最优潮流求解

matlab代码:基于二阶锥规划的主动配电网最优潮流求解 参考文献:主动配电网多源协同运行优化研究_乔珊 摘要:最优潮流研究在配 电网规划运行 中不可或缺 , 且在大量分布式能源接入 的主动配 电网环境下尤 为重要 。传统的启发式算…

【安全防御】防火墙(二)

目录 1、防火墙如何处理双通道协议 2、防火墙如何处理nat 3、防火墙支持哪些NAT,主要应用的场景是什么? 4、当内网PC通过公网域名解析访问内网服务器的时候,会存在什么问题,如何解决?请详细说明 5.防火墙使用VRRP…

2023-04-10 网络流和最大流问题

网络流和最大流问题 1 网络流和最大流问题阐述 网络流基本概念 网络流图中,从源点出发,在满足每条边容量限制的条件下,汇点t最多能接收多少流量 s:sourcet:target 网络流需要满足的限制 容量限制平衡限制:除了源点s和汇点t&a…

第三章 spring IOC与Bean环境搭建与应用

1、手动导入Lib包搭建环境 1.1、下载Apache Common Logging API https://commons.apache.org/proper/commons-logging/download_logging.cgi 1.2、下载spring https://repo.spring.io/ui/native/release/org/springframework/spring/5.3.13/ 名称作用docs包含 Spring 的 …

李宏毅2021春季机器学习课程视频笔记9-再谈宝可梦分类器

宝可梦与数码宝贝很类似。 明显数码宝贝的线条更加复杂,宝可梦更简单,可以从这个角度出发。 利用一些边缘检测工具(canny),e用来计算线条的复杂程…

CSDN,感谢遇见【我的一周年创作纪念日】

机缘 第一次遇见CSDN已经是7年前的事了,那时的我还是一名初二的学生,由于沉迷于玩具战争这款游戏(很遗憾这款游戏已经停服),里面有许多大佬利用各种手段去开挂,所以我意外的接触到了浏览器抓包等计算机技术…

考研数二第十四讲 牛顿-莱布尼茨公式与用定义法求解定积分

牛顿-莱布尼茨公式 牛顿-莱布尼茨公式在微分与积分以及不定积分与定积分之间架起了一座桥梁,因此,这个公式又被称为微积分基本公式。 微积分基本公式的简单推导 在看微积分基本公式之前,我们先来看一个有点特殊的函数,积分上限…

HashMap和HashTable的区别

目录一、HashMap和HashTable的区别二、验证结论1.线程安全和不安全2.继承的父类不同3.对null key和null value的支持不同4.初始化和扩容方式不同一、HashMap和HashTable的区别 1.HashMap方法没有synchronize修饰,线程非安全,HashTable安全 拓展:HashTabl…

OctoClock CDA 2990

CDA 2990 CDA 2990为时钟和PPS分发设备,支持外部一路时钟和PPS输入,最高支持8路时钟和PPS输出。同时CDA 2990可选配带GPS模块版本,可外接GPS天线,支持通过GPS锁定时钟和PPS信号输出。CDA 2990主要用于多台USRP设备进行同步。 CDA…

康耐视Designer-通过康耐视VC5与Omron PLC CJ2MEthernet IP通讯详细设置步骤

测试使用软件版本 Designer Version: 2.7 EDS File Version: 1.01 CX Programmer Version: 9.2 Network Configurator Version: 3.56 测试使用硬件 Cognex Vision Controller VC5 CIC500&CIC2900 OMRON PLC: CJ2M CPU31 PLC端设置 1.在Network Configurator中安装…

算法 二叉树2 || 层序遍历 226.翻转二叉树 101. 对称二叉树 104.二叉树的最大深度 111 二叉树的最小深度 222.完全二叉树的节点个数

102 二叉树的层序遍历 队列先进先出,符合一层一层遍历的逻辑,而用栈先进后出适合模拟深度优先遍历也就是递归的逻辑。 而这种层序遍历方式就是图论中的广度优先遍历,只不过我们应用在二叉树上。 迭代法: /*** Definition for …

进来拿!最近疯传的154页微软 GPT-4早期实验报告:探究 AGI进化之路(全中文版)

这应该是,最近一段时间以来,关于 ChatGPT4.0剖析最全面的一份报告。 看懂10%,能帮我们对 ChatGPT 的认识,有一个质的跃升; 看懂50%,你将是分享 ChatGPT 知识领域最顶尖的那一拨人。 这份报告证明了 GPT-4…

若依数据隔离 ${params.dataScope} 替换 优化为sql 替换

若依数据隔离 ${params.dataScope} 替换 优化为sql 替换 安全问题:有风险的SQL查询:MyBatis解决 若依框架的数据隔离是通过 ${params.dataScope} 实现的 但是在代码安全扫描的时候$ 符会提示有风险的SQL查询:MyBatis 所以我们这里需要进行优化参考: M…

5分钟学会Ribbon负载均衡

文章目录一、Ribbon1.1 Ribbon的负载均衡流程:1.2 负载均衡策略1.2.1 内置的负载均衡策略1.2.2 如何修改负载均衡1.3 加载方式一、Ribbon 1.1 Ribbon的负载均衡流程: 获取可用的服务列表:客户端在进行服务调用之前,首先需要获取可…

如何基于ChatGPT+Avatar搭建24小时无人直播间

0 前言 最近朋友圈以及身边很多朋友都在研究GPT开发,做了各种各样的小工具小Demo,AI工具用起来是真的香!在他们的影响下,我也继续捣鼓GPT Demo,希望更多的开发者加入一起多多交流。 上一篇结合即时通 IM SDK捣鼓了一个…

SpringAOP入门基础银行转账实例(进阶版)------------事务处理

SpringAOP入门基础银行转账实例**(进阶版)**------------事务处理 由上一节讲述的通过Connection和QueryRunner对事务进行的处理(详情可以去我之前写的博客文章:https://blog.csdn.net/m0_56245143/article/details/130069160?spm1001.2014…

VMware vSphere 8.0c - 企业级工作负载平台

ESXi 8.0.0 & vCenter Server 8.0.0 GA (General Availability) 请访问原文链接:https://sysin.org/blog/vmware-vsphere-8/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org 2023-03-30, VMware vSphere 8.0c 发…