培训网站网站建设邢台论坛吧

张小明 2026/1/11 9:50:53
培训网站网站建设,邢台论坛吧,网络营销是什么的基础,wordpress幻灯片插件怎么用半夜被电话叫醒#xff0c;消息积压了200万条#xff0c;消费者根本追不上。 这种场景搞过Kafka的应该都经历过#xff0c;整理一下踩过的坑和解决方案。 坑一#xff1a;消息积压 现象 监控告警#xff1a;topic-order的lag超过100万。 # 查看消费者lag kafka-consumer-g…半夜被电话叫醒消息积压了200万条消费者根本追不上。这种场景搞过Kafka的应该都经历过整理一下踩过的坑和解决方案。坑一消息积压现象监控告警topic-order的lag超过100万。# 查看消费者lagkafka-consumer-groups.sh --bootstrap-server localhost:9092\--describe --group order-consumer GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG order-consumer topic-order0123456723456781111111order-consumer topic-order1123456823456791111111order-consumer topic-order2123456923456801111111三个分区每个积压100多万加起来300多万。排查过程1. 先看生产速度# 查看topic的写入速度kafka-run-class.sh kafka.tools.GetOffsetShell\--broker-list localhost:9092\--topic topic-order --time -1# 隔10秒再执行一次算差值# 发现每秒写入约5000条2. 再看消费速度消费者日志显示处理一条消息要200ms算下来每秒只能处理5条。问题找到了消费太慢。解决方案方案一增加消费者实例Kafka的分区数决定了最大并行度。3个分区最多3个消费者并行。# 先增加分区注意分区只能增不能减kafka-topics.sh --bootstrap-server localhost:9092\--alter --topic topic-order --partitions12然后部署12个消费者实例。方案二批量消费// 原来一条一条处理KafkaListener(topicstopic-order)publicvoidconsume(Stringmessage){processOrder(message);// 200ms}// 优化后批量处理KafkaListener(topicstopic-order)publicvoidconsumeBatch(ListStringmessages){// 攒一批再处理减少IO次数batchProcessOrders(messages);// 批量写库}配置调整spring:kafka:consumer:max-poll-records:500# 一次拉取500条listener:type:batch# 批量模式方案三异步处理KafkaListener(topicstopic-order)publicvoidconsume(Stringmessage){// 扔到线程池异步处理executor.submit(()-processOrder(message));}但要注意异步处理需要手动管理offset提交不然可能丢消息。效果优化后消费速度从5条/秒提升到3000条/秒积压2小时内消化完。坑二消息丢失现象业务反馈有订单没收到但生产端日志显示发送成功了。排查1. 生产端配置props.put(acks,1);// 问题在这acks1表示leader收到就返回成功但如果leader挂了、follower还没同步消息就丢了。2. 消费端配置props.put(enable.auto.commit,true);props.put(auto.commit.interval.ms,1000);自动提交offset如果消费处理到一半程序挂了offset已经提交了这条消息就丢了。解决方案生产端// acksall所有ISR副本都写入才算成功props.put(acks,all);// 重试次数props.put(retries,3);// 开启幂等性props.put(enable.idempotence,true);消费端// 关闭自动提交props.put(enable.auto.commit,false);// 手动提交KafkaListener(topicstopic-order)publicvoidconsume(ConsumerRecordString,Stringrecord,Acknowledgmentack){try{processOrder(record.value());ack.acknowledge();// 处理成功才提交}catch(Exceptione){// 处理失败不提交会重新消费log.error(处理失败,e);}}Broker端# 最小ISR副本数 min.insync.replicas2 # 不允许非ISR副本选举为leader unclean.leader.election.enablefalse坑三重复消费现象同一条消息被处理了两次导致订单重复扣款。原因消费者处理完消息还没来得及提交offset就挂了。重启后从上次提交的offset开始消费这条消息又被消费一次。Kafka是at-least-once语义不保证exactly-once。解决方案业务幂等publicvoidprocessOrder(Stringmessage){OrderorderJSON.parseObject(message,Order.class);// 先查是否已处理过if(orderService.exists(order.getOrderId())){log.info(订单已处理过跳过: {},order.getOrderId());return;}// 处理订单orderService.process(order);}Redis去重publicvoidprocessOrder(Stringmessage){StringmsgIdextractMsgId(message);// Redis SETNX已存在返回falsebooleanisNewredis.setIfAbsent(kafka:processed:msgId,1,24,TimeUnit.HOURS);if(!isNew){log.info(消息已处理过: {},msgId);return;}// 处理业务doProcess(message);}数据库唯一约束-- 用唯一约束兜底CREATEUNIQUEINDEXuk_order_idONorders(order_id);坑四消费者频繁Rebalance现象日志里频繁出现Revoking previously assigned partitions Rebalance triggered消费者不停地Rebalance效率极低。原因1. 心跳超时// 默认10秒没心跳就认为消费者挂了session.timeout.ms10000如果处理一条消息超过10秒就会被踢出消费组。2. poll间隔太长// 默认5分钟内必须调用pollmax.poll.interval.ms300000处理500条消息花了6分钟超时了。解决方案// 增加session超时时间props.put(session.timeout.ms,30000);props.put(heartbeat.interval.ms,10000);// 增加poll间隔props.put(max.poll.interval.ms,600000);// 减少单次拉取数量props.put(max.poll.records,100);核心原则确保在max.poll.interval.ms内能处理完max.poll.records条消息。坑五顺序消费需求同一个用户的操作必须按顺序处理。问题默认情况下消息分散到不同分区不同分区的消费顺序无法保证。解决方案指定分区key// 用userId作为key相同userId的消息会落到同一分区kafkaTemplate.send(topic-order,userId,message);单分区方案不推荐除非量很小// 只用一个分区保证全局顺序kafkaTemplate.send(topic-order,0,null,message);注意事项同一分区内保证顺序但重试可能打乱顺序设置max.in.flight.requests.per.connection1保证严格顺序props.put(max.in.flight.requests.per.connection,1);性能调优参数生产者# 批量发送攒够16K或等1ms就发 batch.size16384 linger.ms1 # 发送缓冲区 buffer.memory33554432 # 压缩推荐lz4 compression.typelz4消费者# 单次拉取大小 fetch.min.bytes1 fetch.max.bytes52428800 fetch.max.wait.ms500 # 单次poll记录数 max.poll.records500Broker# 日志保留 log.retention.hours168 log.retention.bytes1073741824 # 分区数根据消费者数量设置 num.partitions12 # 副本 default.replication.factor3 min.insync.replicas2监控指标这几个指标必须监控指标含义报警阈值ConsumerLag消费延迟根据业务定MessagesInPerSec写入速度突增报警BytesInPerSec流量接近带宽报警UnderReplicatedPartitions副本不足的分区0报警OfflinePartitionsCount离线分区0报警集群运维我们的Kafka集群分布在两个机房之前两边网络不通很麻烦。后来用星空组网把两个机房组到一个网络里Kafka的跨机房复制配置简单多了。总结Kafka踩坑清单问题原因解决方案消息积压消费慢加分区、批量消费、异步处理消息丢失acks配置不当acksall、手动提交重复消费at-least-once语义业务幂等、去重频繁Rebalance超时配置不当调整超时参数顺序问题多分区并行指定分区keyKafka本身很稳定大多数问题都是配置和使用不当导致的。有Kafka相关问题欢迎评论区讨论~
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

做房产网站需要多少钱标书制作图片

概率论与数理统计思维导图 一、概率论基础 1. 随机事件与概率 随机试验:可重复、结果已知但不确定样本空间(Ω):所有可能结果的集合随机事件:Ω的子集 基本事件:单元素子集必然事件(Ω):一定发生不可能事件(∅)&#x…

张小明 2026/1/7 2:39:07 网站建设

个人域名可以做KTV网站吗10种网络营销方法

Kotaemon配置文件详解:掌握核心参数调优技巧 在工业物联网和边缘计算设备日益普及的今天,一个稳定可靠的系统不再仅仅依赖于硬件性能或应用逻辑,而更多取决于“看不见”的守护者——系统级监控与自愈机制。Kotaemon 正是这样一位默默运行在后…

张小明 2026/1/9 0:22:20 网站建设

网站网店建设免费公司logo设计图

文章揭示了企业AI落地面临的现实挑战,指出多数企业对AI"降本增效"的期望与实际效果存在巨大差距。AI价值被过度神化,成为部分人博取名声的工具,而忽视了数据治理、质量等基础要素。企业领导认知滞后,仍用传统思维推动AI…

张小明 2025/12/24 13:15:22 网站建设

建设网站的模板网页源代码大全

RuoYi-Cloud-Plus作为企业级微服务权限管理的终极解决方案,通过整合SpringCloud Alibaba、Dubbo3.0、Sa-Token等主流技术栈,为企业提供了一套完整的权限控制体系。该项目重写了RuoYi-Cloud所有功能,支持容器化部署和全方位技术升级&#xff0…

张小明 2026/1/9 20:38:52 网站建设

网站怎么做qq微信登陆界面设计沧州网站建设哪家专业

QQ截图独立版:免登录高效截图工具全解析 【免费下载链接】QQScreenShot 电脑QQ截图工具提取版,支持文字提取、图片识别、截长图、qq录屏。默认截图文件名为ScreenShot日期 项目地址: https://gitcode.com/gh_mirrors/qq/QQScreenShot 还在为繁琐的登录流程而…

张小明 2025/12/24 13:12:16 网站建设

网站排版旅游网址大全

工作流调度服务与调用活动详解 1. 调度服务项目构建 1.1 调度服务选择 在不同的应用场景下,选择合适的调度服务非常重要。如果使用 Windows Forms 主机,手动调度服务可能更合适,因为它执行速度快,阻塞操作不会对 UI 产生不利影响,并且能防止用户在当前事件处理时激活其…

张小明 2025/12/24 13:11:14 网站建设