【Kafka】Kafka可靠的数据传递

news/2025/3/26 14:48:21/文章来源:https://www.cnblogs.com/cmxb/p/18789851

可靠性的保证

分区数据有序性

  • Kafka可以保证分区中的消息时有序的,如果同一个生产者向同一个分区写入消息,消息B在消息A 之后写入,那么Kafka可以保证消息B的偏移量比消息A的大,并且消费者会先读取消息A再读取消息B
  • 一条消息只有在被写入分区的所有副本时才会被认为是已提交
  • 只要还有一个副本是活动的,已提交的消息就不会丢失
  • 消费者只能读取已提交的消息

复制

kafka的复制机制和分区多副本架构是kafka可靠性保证的核心。
把消息写入多个副本,可以保证kafka在发生崩溃后仍然能够提供消息的持久性。

broker层面的可靠性配置

broker中有3个参数影响Kafka的消息存储可靠性。
参数即作用于所有topic,也可仅作用于单个topic

复制系数

  • replication.factor:主题级别的副本个数配置
  • default.replication.factor:broker级别,用来自动配置创建topic时的副本数。
    假设副本个数是N,那么在N-1个broker失效的情况下,客户端仍能从主题读取数据或者写入数据。所以更高的副本数,能带来更高的可用性、可靠性和更少的灾难性事故。但是会占用N倍的磁盘空间。

副本个数设置考虑因素

  • 可用性:如果一个分区仅有一个副本,那么broker重启期间将不可用,副本越多,可用性越高
  • 持久性:每个副本都包含了一个分区的所有数据,如果仅有一个副本,一旦磁盘损坏,分区数据就丢失了。
  • 吞吐量:每增加一个副本,都会增加broker内复制流量。如果以10MBps的速率向一个分区发送数据,在规划集群大小时,需要考虑该因素。
    • 1个副本:不增加复制流量
    • 2个副本:增加10MBps复制流量
    • 3个副本:增加20MBps复制流量
  • 端到端的延迟:每个消息,只有同步到所有副本之后,才能被消费者消费。当一个broker变慢,就会影响所有的客户端。
  • 成本:数据副本越多,存储和网络成本就越高,所以非关键数据,副本数可以不用很高。

不彻底的首领选举

  • unclean.leader.election.enablebroker级别的配置,默认是false
    当分区首领不可用时,一个同步副本会被选举为新首领,如果选举过程中未丢失数据,则成为彻底选举

首领选举场景

  • 不允许不同步副本被提升为新首领:这样配置会导致最后一个同步副本恢复前,分区是不可用的
  • 允许不同步副本被提升为新首领:能够保证可用性,但是需要承担部分数据丢失和消费者读取到数据不一致的风险。

最少同步副本

min.insync.replicas:作用在topic和broker级别

如果一个topic有3个副本,最终只用一个同步副本,最后这个副本也变为不可用,那么需要在可用性和一致性做出选择。根据Kafka可靠性保证,一条消息被写入所有同步副本后才认为是已提交的,如果没有可用副本,则数据有可能丢失。

min.insync.replicas:可以设置消息最少要有同步副本,才能像分区写入数据。

持久化到磁盘

消息没有被持久化到磁盘中,Kafka也可以向生产者发出确认,这取决于已经接收到晓得副本数量。我们可以配置flush.messages用于控制同步到磁盘的最大消息数和flash.ms用于控制同步频率。

生产者的可靠性

如果broker我们配置了高可靠,但是生产者没有进行可靠性方面的配置,那么系统还是会有丢失数据的风险。

消息确认

  • acks=0:broker配置副本数是3个,但是该参数下,仅关注消息是否发送,认为发送成功就代表写入Kafka,如果broker崩溃,就是丢失消息。发送完了,在所有副本没有同步完消息前,消费者是看不到消息的
  • acks=1:首领副本写入消息后,就返回成功,与 acks=0类似的问题,消息丢失和消费者查看数据的延迟。
  • acks=all:等待所有听不副本收到消息再返回。这种最安全,在返回成功响应前会一直重试,直到消息提交成功。

生产者重试

  • 可重试错误:broker本身问题,重启、首领选举等,这些再等待一段时间后就可以解决。
  • 不可重试错误:序列化错误、消息过大等,这种broker无法处理,重试没有意义。
  • 开发人员处理的错误
    • 消息过大、身份认证
    • 序列化错误
    • 重试达到上限
    • 超时

消费者的可靠性

消费者的可靠性主要依赖于偏移量的提交。
涉及到reblance时,新消费者对分区数据的消费

可靠性配置

  • group.id:如果希望一个消费者消费topic所有分区数据,则需要设置一个唯一group.id
  • auto.offset.reset:指定了当没有偏移量时,消费者该如何处理
    • earliest:从开始位置读取,会导致重复消费
    • latest:从最新位置读取,会导致部分数据丢失
  • enable.auto.commit:自动提交偏移量;如果业务逻辑较为复杂,需要其他程序进行提交,则需要手动提交。
  • auto.commit.interval.ms:控制自动提交的频率,默认每5秒提交一次。

手动提交偏移量

需要从从灵活性,正确性和性能方面进行考虑

  • 总在处理完消息后提交偏移量
  • 提交频率是性能和重复消息数量间的平衡
  • 正确的时间点提交正确的偏移量
  • 再均衡
  • 消费者可能需要重试如果两个消息,#30和#31,记录#30处理失败,#31处理成功,这时不能进行#31的提交,否则会将记录#30标记为成功

运行中kafka可靠性的监控

  • 消息的错误率和重试率,如果两个上升,代表系统出了问题
  • 积压率:如果积压过多则代表消费者有问题,需要处理
  • 收集生产者和消费者处理速率,保证二者时间差在一个合理范围。

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

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

相关文章

T+0量化:JAVA接入Level2高频行情(附Python代码)

去年在知乎分享过一个网格策略,评论区全是"代码能跑通但实盘不敢用"的留言。当时我也一样——用第三方平台回测美滋滋,一到实盘就怂:行情延迟3秒、API调用次数受限、策略逻辑被平台规则卡脖子…直到把整套系统搬回本地,才发现自建交易系统的快感就像从合租屋搬进…

制作一个简单的带有3D打印部件的四足蜘蛛机器人

在这个项目中,我将向您展示如何使用3D打印部件制作一个简单的4腿行走蜘蛛机器人。该设计主要由上下板、臂接插件、腿和伺服支架五个部分组成。机器人的4条腿由4个手臂部分和4个腿部分组成。机器人的运动总共使用了8个业余伺服电机,4个在手臂上,4个在腿上。在电路方面,首选E…

统计学习之数据挖掘(结构数据)

统计学习之数据挖掘(结构数据):降维聚类关联度分析分类神经网络

2024 腾讯游戏安全大赛 mobile 初赛 wp

找关键结构体 https://www.cnblogs.com/revercc/p/17641855.html 找GWORLD https://bbs.kanxue.com/thread-280042.htm可以发现是 TEXT包裹的,utf-16编码,ida alt + b搜索 53 00 65 00 61 00 6D 00 6C 00 65 00 73 00 73 00 54 00 72 00即可网上翻即可找到 GWorld对应地址: 0…

制造业订单处理烦恼多,日事清 OTD 管理为您排忧解难

你是不是经常因为接单和交货时间差太大而焦头烂额?今天我们就结合制造业OTD管理,带您了解如何应用日事清进行订单交付全周期管理。日事清可以帮你设定精细的流程,从接单到发货,清晰可控地帮你解决以上烦心事。在制造业里打拼,每天都得面对各种烦心事,比如订单处理慢、生产…

如何在SSD1306上显示动态表情符号位图

解锁您的SSD1306上充满活力的视觉效果!学习毫不费力地显示动态表情符号位图,并以风格增强您的项目。 在本教程中,我们将通过使用PCBX在线模拟环境在SSD1306 OLED显示器上显示位图图像的过程。本教程将介绍设置PCBX模拟,格式化位图数据,配置显示大小和管理图像延迟。步骤1:…

redis基础数据结构——ZipList

ZipList 基于特殊写法实现的双端链表,由一系列特殊编码的连续内存块组成,可以像deque一样在双端压入/弹出,并且时间复杂度在O(1) 整体ZL结构如下zlbytes(uint32):当前zl总的byte数。 zltail(uint32):尾结点的offset,指向的是最后一个entry的起始地址。 zllen(uint16):记…

day:28 postman——环境变量(依赖,关联接口)

一.接口的环境变量 (1)定义变量 可以将需要填写的值设为变量 变量设置:{{}}(2)添加环境变量 方法一:方法二:(3)查看环境变量(4)选择环境,执行二.依赖接口 先登录接口成功,生成cookie值,才能让后面接口依赖 cookie值是保持会话 查看cookie值方法 方法一:方法二:…

L1.1 技术和产品准备度

L1.1 技术和产品准备度 技术和产品准备度 技术与产品的演进 ​ 上面这张图展示了如何在技术尚未完全成熟时,启动产品开发,以及技术如何随着新需求或洞察逐步演进,并支持产品的更新换代。产品1.0:由先前研发的的技术3支撑,加上“产品开发可以在预期的技术开发成果的基础上提…

从故障响应到客户信赖:华为ITR流程的五大核心步骤与实战案例

华为究竟是如何在与西方巨头的激烈竞争中崭露头角、脱颖而出的呢?答案是:凭借卓越的服务。今天我们来探讨一下华为是如何通过卓越的服务赢得全球市场的。 一、华为的三件大事 华为前高管费敏曾经总结过,华为的业务可以分成三件大事:1. 开发产品:这就是 IPD 流程,负责从有…

提升生产效率的关键: ethercat转TCPIP智能通信

大家好。最近在数据互联互通方面,我们迎来了一个重要的突破。作为生产管理系统的核心组成部分,数据互联互通一直是一个亟待解决的挑战。我们知道,EtherCAT和TCP/IP是两种不同的通信协议,它们之间的互通性一直存在问题。不过,现在有一款新产品值得关注,这款产品能够实现Et…

Trae初体验

Trae(国际版)的Ai搭载Claude-3.7-Sonnet(完全免费且速度很快)和DeepSeek-R1以及V3(不存在服务器繁忙)以及GPT-4o Trae国服的Ai搭载DouBao和DeepSeek。用Claude-3.7-Sonnet 写一个简易的贪吃蛇小游戏:这个贪吃蛇游戏包含以下功能:使用方向键控制蛇的移动 吃到食物会增加长度和…