当前位置: 首页 > news >正文

优秀国外网站软件开发培训机构排名

优秀国外网站,软件开发培训机构排名,签到 做任务赚钱的网站,正规网站建设公司目录 1. 生产者端:确保消息成功发送到Broker 核心机制: 关键步骤: 2. Broker端:持久化与副本同步 核心机制: 关键源码逻辑: 3. 消费者端:可靠消费与Offset提交 核心机制: 关…

目录

1. 生产者端:确保消息成功发送到Broker

核心机制:

关键步骤:

2. Broker端:持久化与副本同步

核心机制:

关键源码逻辑:

3. 消费者端:可靠消费与Offset提交

核心机制:

关键步骤:

4. 全链路保障流程

消息丢失的典型场景与规避

总结


  1. 生产者端
    • 设置acks=all确保所有ISR副本写入成功。
    • 启用重试(retries)和幂等性(enable.idempotence=true,依赖ProducerIdSequenceNumber)。
  1. Broker端
    • 副本数replication.factor≥3,ISR最小副本数min.insync.replicas≥2
    • 使用flush机制定期刷盘(通过log.flush.interval.messages配置)。
  1. 消费者端
    • 手动提交Offset(enable.auto.commit=false),处理完消息后调用commitSync()

Kafka通过生产者端确认机制Broker端持久化与副本同步消费者端可靠消费三个核心环节保障消息不丢失。以下是具体实现机制与步骤:


1. 生产者端:确保消息成功发送到Broker

核心机制
  • acks确认机制
    • acks=0:生产者不等待Broker确认,可能丢失消息(不推荐)。
    • acks=1:Leader副本写入即确认,若Leader宕机且未同步到其他副本,可能丢失。
    • acks=all(或acks=-1:必须等待所有ISR副本写入成功,才返回确认(最高可靠性)。
  • 重试机制
    • 配置retries=N(如3次),在Broker临时故障时自动重试。
    • 幂等性(enable.idempotence=true):通过Producer IDSequence Number去重,避免网络重试导致消息重复。
关键步骤
// 生产者配置示例
Properties props = new Properties();
props.put("acks", "all");          // 必须所有ISR副本确认
props.put("retries", 3);           // 重试次数
props.put("enable.idempotence", "true"); // 开启幂等性

2. Broker端:持久化与副本同步

核心机制
  • 副本机制(Replication)
    • 每个Partition有多个副本(replication.factor≥3),Leader处理读写,Follower同步数据。
    • ISR(In-Sync Replicas):只有与Leader保持同步的副本才属于ISR集合。
    • min.insync.replicas=2:至少需要2个ISR副本写入成功,否则生产者抛出NotEnoughReplicasException
  • 持久化策略
    • 页缓存(Page Cache):依赖操作系统缓存加速写入,数据异步刷盘。
    • 强制刷盘:通过log.flush.interval.messageslog.flush.interval.ms控制刷盘频率(高可靠性场景建议启用)。
  • Leader选举与数据恢复
    • 若Leader宕机,Controller从ISR中选举新Leader,确保数据不丢失。
    • 若所有ISR副本宕机,需配置unclean.leader.election.enable=false(禁止非ISR副本成为Leader)。
关键源码逻辑
  • 副本同步:Leader通过ReplicaFetcherThread向Follower同步数据(源码见kafka.server.ReplicaFetcherThread)。
  • ISR管理:Broker定期检查Follower的同步状态,延迟超过replica.lag.time.max.ms的副本会被移出ISR。

3. 消费者端:可靠消费与Offset提交

核心机制
  • 手动提交Offset
    • 关闭自动提交enable.auto.commit=false),在消息处理完成后手动调用commitSync()commitAsync()
    • 若消费者崩溃,下次启动时从最后提交的Offset恢复,避免消息丢失。
  • 事务性消费
    • 结合Kafka事务(isolation.level=read_committed),仅消费已提交的事务消息。
关键步骤
// 消费者配置示例
props.put("enable.auto.commit", "false"); // 关闭自动提交
while (true) {ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));for (ConsumerRecord<String, String> record : records) {processRecord(record); // 处理消息consumer.commitSync(); // 处理完成后提交Offset}
}

4. 全链路保障流程

  1. 生产者发送
    • 消息发送后等待acks=all确认。
    • 若Broker未确认,按retries重试。
  1. Broker持久化
    • Leader和ISR副本将消息写入日志文件。
    • 根据配置决定是否强制刷盘。
  1. 消费者消费
    • 处理消息后手动提交Offset。
    • 若消费者崩溃,从已提交Offset恢复。

消息丢失的典型场景与规避

场景

规避措施

生产者acks=1

,Leader宕机

使用acks=all

+ min.insync.replicas=2

ISR副本不足导致写入失败

增加replication.factor

,确保min.insync.replicas

≤ 当前ISR副本数。

消费者自动提交Offset,消息未处理

关闭自动提交,处理完成后手动提交。

磁盘故障导致数据丢失

使用RAID或分布式存储,确保多副本分布在不同物理节点。


总结

Kafka通过以下组合策略保障消息不丢失:

  1. 生产者端acks=all + 幂等性 + 重试。
  2. Broker端:多副本同步 + ISR管理 + 强制刷盘。
  3. 消费者端:手动提交Offset + 事务性消费。

正确配置后,Kafka可提供至少一次(At-Least-Once)或精确一次(Exactly-Once) 的语义保障。

http://www.tj-hxxt.cn/news/109973.html

相关文章:

  • 江苏有什么网站找工程建设人员热狗seo顾问
  • asp.net 怎么做网站怎样交换友情链接
  • 百度网页制作网站建设互联网推广广告
  • 社区微网站建设方案百度搜索下载安装
  • 一起做网店网站个人seo怎么赚钱
  • 手机做外贸有什么好的网站网络营销怎么推广
  • 厦门英文网站建设seo优化推广
  • wordpress主题top点击精灵seo
  • 聊天网站模板上海seo网络优化
  • java做音乐网站草根seo视频大全网站
  • wordpress 文章顶踩插件旺道seo推广效果怎么样
  • 申请域名空间seo刷关键词排名工具
  • 长白山开发建设集团网站直播代运营公司
  • ps怎么做网站搭建网站需要什么技术
  • 用eclipse做网站销售推广方案
  • 怎么在百度上做免费网站手机优化大师官方免费下载
  • 网站seo信息隐藏百度手机助手应用商店下载
  • 怎样给网站做 站内搜索营销方案
  • 做实验用哪些国外网站上海网站制作开发
  • 鄂州网站制作企业如何设计网站
  • 太原网站制作策划杭州最专业的seo公司
  • 国外html5 css3高端企业网站百度搜索引擎平台
  • 荆州哪个公司做网站seo应该怎么做
  • 好用的做网站的appseo网络推广优化
  • 给手机做网站的公司有哪些淮北seo排名
  • 北京王府井攻略建站网站关键词优化
  • 做网站简单的软件营销型网站模板
  • 中国未来巨型空间站怎么样拓展客户资源
  • youhosting wordpress谷歌seo推广公司
  • 深圳营销型网站建设服务费用公司怎么建立自己的网站