郑州市网站学校官网网站建设的现状分析

张小明 2026/1/8 13:13:33
郑州市网站,学校官网网站建设的现状分析,开发一个网站需要多少人,网页是怎么做的视频看了几百小时还迷糊#xff1f;关注我#xff0c;几分钟让你秒懂#xff01;一、问题背景#xff1a;消息为什么会“丢”#xff1f;很多开发者以为 Kafka “天生可靠”#xff0c;但消息丢失往往发生在“消费端提交偏移量”的环节。 即使 Kafka 本身持久化了消息关注我几分钟让你秒懂一、问题背景消息为什么会“丢”很多开发者以为 Kafka “天生可靠”但消息丢失往往发生在“消费端提交偏移量”的环节。即使 Kafka 本身持久化了消息如果你的消费者提前提交了 offset而业务逻辑还没执行完一旦应用崩溃——这条消息就永远消失了。 典型场景用户下单成功Kafka 发送“订单创建”事件消费者收到消息准备扣库存offset 被提前提交扣库存前服务宕机 →订单已确认但库存没扣这不是 Kafka 的锅而是提交策略不当导致的二、根本原则先处理业务再提交 offset✅正确顺序1. 拉取消息 2. 执行业务逻辑如写 DB、调接口 3. 业务成功 → 提交 offset❌错误顺序自动提交默认行为1. 拉取消息 2. 后台线程定时提交 offset不管业务是否完成 3. 业务执行中崩溃 → 消息丢失三、解决方案关闭自动提交 手动 ACK 幂等消费下面我们用Spring Boot Kafka实现一个不丢消息的消费者。✅ 步骤 1关闭自动提交关键# application.yml spring: kafka: consumer: enable-auto-commit: false # 必须关闭 group-id: order-service key-deserializer: org.apache.kafka.common.serialization.StringDeserializer value-desserializer: org.springframework.kafka.support.serializer.JsonDeserializer properties: spring.json.trusted.packages: com.example.dto⚠️enable-auto-commit: false是防止消息丢失的第一道防线✅ 步骤 2配置手动 ACK 模式// KafkaConfig.java Configuration EnableKafka public class KafkaConfig { Bean public ConcurrentKafkaListenerContainerFactoryString, OrderEvent kafkaListenerContainerFactory( ConsumerFactoryString, OrderEvent consumerFactory) { ConcurrentKafkaListenerContainerFactoryString, OrderEvent factory new ConcurrentKafkaListenerContainerFactory(); factory.setConsumerFactory(consumerFactory); // 设置为手动立即确认 factory.getContainerProperties().setAckMode(ContainerProperties.AckMode.MANUAL_IMMEDIATE); return factory; } }✅ 步骤 3消费者代码业务成功才 ACK// OrderConsumer.java Component public class OrderConsumer { Autowired private InventoryService inventoryService; KafkaListener(topics order-created, groupId order-service) public void consume(OrderEvent event, Acknowledgment ack) { try { // 1. 业务处理扣减库存 inventoryService.decreaseStock(event.getProductId(), event.getQuantity()); // 2. 业务成功 → 手动提交 offset ack.acknowledge(); log.info(订单 {} 处理成功offset 已提交, event.getOrderId()); } catch (Exception e) { // 3. 业务失败 → 不提交 offset log.error(处理订单失败不提交 offset等待重试, e); // 可选记录到死信队列避免无限重试 } } }✅ 这样只有库存扣减成功offset 才会提交。如果失败下次重启还会重新消费同一条消息。四、进阶保障幂等性设计防重复消费由于我们采用“失败不提交 offset”消息可能会被重复消费。因此消费者必须幂等 幂等实现方式方式 1数据库唯一索引推荐CREATE TABLE processed_messages ( message_id VARCHAR(64) PRIMARY KEY, -- Kafka 消息的 key 或生成的 UUID processed_at TIMESTAMP );消费时if (!messageLogService.exists(event.getMessageId())) { // 执行业务 inventoryService.decreaseStock(...); // 记录已处理 messageLogService.save(event.getMessageId()); ack.acknowledge(); }方式 2业务状态机订单状态CREATED→STOCK_DEDUCTED如果已经是STOCK_DEDUCTED直接跳过五、反例对比自动提交 vs 手动提交场景自动提交enable-auto-committrue手动提交enable-auto-commitfalse消费消息后处理耗时 10 秒5 秒时自动提交 offset不提交直到ack.acknowledge()处理到第 8 秒时服务崩溃消息丢失offset 已提交消息保留offset 未提交重启后重试适合场景日志、监控等可容忍丢失的数据订单、支付、通知等关键业务六、其他注意事项1.不要在 ACK 后做关键操作// ❌ 危险ACK 后再操作崩溃会导致数据不一致 ack.acknowledge(); inventoryService.decreaseStock(...); // 崩溃 → offset 提交了但库存没扣✅ 正确顺序业务 → ACK2.避免长时间阻塞消费者线程如果业务耗时很长如调外部 API考虑异步处理 本地事务表或使用RetryableTopic 死信队列DLQ机制3.测试你的容错能力用kill -9模拟非优雅关闭观察消息是否重试、是否重复、是否丢失七、总结要防止 Kafka 消息在提交过程中丢失请牢记关闭自动提交enable-auto-commit: false业务成功后再手动 ACK消费者必须幂等防重复ACK 前不要做任何可能失败的关键操作这样即使服务崩溃、网络中断、机器宕机你的消息也不会丢失视频看了几百小时还迷糊关注我几分钟让你秒懂
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

厦门高端网站建设公司网站建设的公司前景

一:主要的知识点 1、说明 本文只是教程内容的一小段,因博客字数限制,故进行拆分。主教程链接:vtk教程——逐行解析官网所有Python示例-CSDN博客 2、知识点纪要 本段代码主要涉及的有①模型下采样 二:代码及注释 i…

张小明 2025/12/31 22:47:43 网站建设

做医院网站及微信公众号价格建设银行网上银行网站

Qt 应用程序中的用户帮助功能实现 在开发应用程序时,为用户提供有效的帮助是提升用户体验的关键。Qt 提供了多种方式来为用户提供帮助,如向导、工具提示、状态栏消息以及指向产品文档的指针等。下面将详细介绍这些帮助功能的实现方法。 1. 提供帮助的原则 在考虑为应用程序…

张小明 2025/12/31 22:47:40 网站建设

站长之家网站建设小程序开发费用一览表fhq华网天下

Ubuntu系统常见问题及解决方法 在使用Ubuntu系统的过程中,我们可能会遇到各种各样的问题。本文将为大家详细介绍一些常见问题的解决方法,包括显卡驱动安装、屏幕显示问题、硬盘存储问题、软件安装问题以及应用程序常见问题等。 显卡驱动安装 AMD显卡驱动安装步骤 : 打开终…

张小明 2025/12/31 22:47:37 网站建设

周村网站建设中国新闻社浙江分社

一、关键函数树形架构分析核心架构层次fbcon架构体系 ├── 初始化/退出层 │ ├── fb_console_init() - 模块初始化入口 │ ├── fbcon_start() - 启动fbcon接管控制台 │ ├── fbcon_exit() - 清理退出 │ └── fbcon_…

张小明 2026/1/2 22:07:34 网站建设

湖南中小企业建站价格注册工程公司名称大全

跨平台应用开发:从理论到实践 1. 跨平台应用开发基础 在跨平台应用开发中,Model - View - Controller(MVC)模式是核心架构,同时,Widget 框架可用于开发完全自包含的可重用组件。以下是一个使用 Alloy 创建 Widget 的示例代码: <Alloy><Window id="mai…

张小明 2026/1/1 0:44:01 网站建设

网站建设 开发工具 python展台展览

AI原生应用领域自主代理的核心算法解读关键词&#xff1a;自主代理、AI原生应用、大语言模型、任务规划、反馈学习摘要&#xff1a;在AI原生应用中&#xff0c;“自主代理”&#xff08;Autonomous Agents&#xff09;是能像人类助手一样独立思考、行动并学习的智能体。本文将从…

张小明 2026/1/1 0:43:58 网站建设