实用指南:云原生时代 Kafka 深度实践:03进阶特性与最佳实践

news/2025/10/5 14:53:38/文章来源:https://www.cnblogs.com/ljbguanli/p/19126593

实用指南:云原生时代 Kafka 深度实践:03进阶特性与最佳实践

3.1 数据可靠性与一致性

Producer 端可靠性策略

Kafka 通过acks参数控制消息确认机制,不同设置适用于不同场景:

幂等性生产者

开启幂等性(enable.idempotence=true)可避免消息重复发送:

props.put(ProducerConfig.ENABLE_IDEMPOTENCE_CONFIG, "true");

幂等性生产者通过为每个消息分配唯一 ID(PID)和序列号(Sequence Number),确保 Broker 不会重复写入相同消息。

Consumer 端 Exactly-Once 语义

Kafka 提供三种消费语义:

  • At-Most-Once(最多一次):消费失败后不重试,可能导致消息丢失。
  • At-Least-Once(至少一次):消费失败后重试,可能导致消息重复消费。
  • Exactly-Once(精确一次):通过事务或幂等性保证每条消息仅被消费一次。

实现 Exactly-Once 语义的关键是将消息消费与 Offset 提交作为原子操作:

// 配置事务props.put(ProducerConfig.TRANSACTIONAL_ID_CONFIG, "my-transactional-id");producer.initTransactions(); try {    producer.beginTransaction();    // 消费消息    ConsumerRecords records = consumer.poll(Duration.ofMillis(100));    for (ConsumerRecord record : records) {        // 处理消息        process(record);        // 发送结果到输出Topic        producer.send(new ProducerRecord<>("output_topic", record.key(), processResult));    }    // 提交消费位移和生产的消息    producer.sendOffsetsToTransaction(currentOffsets, "test_group");    producer.commitTransaction();} catch (Exception e) {    producer.abortTransaction();}

3.2 分区分配与负载均衡

Consumer Group 分区分配策略

Kafka 提供三种内置分区分配策略:

通过partition.assignment.strategy参数配置分配策略:

props.put(ConsumerConfig.PARTITION_ASSIGNMENT_STRATEGY_CONFIG,           Collections.singletonList(StickyAssignor.class.getName()));

动态 Rebalance 机制

当 Consumer 加入或退出 Group、Topic 分区数变更时,会触发 Rebalance:

Coordinator 选举:Group 中第一个启动的 Consumer 向任意 Broker 发送请求,获取 Group Coordinator(负责管理该 Group 的 Broker)。

  1. 成员注册:所有 Consumer 向 Coordinator 注册,Coordinator 收集所有成员信息。
  2. 分区分配:Coordinator 选择一种分配策略,计算每个 Consumer 应分配的分区。
  3. 分配结果通知:Coordinator 将分配结果发送给所有 Consumer。

自定义分区分配策略

实现org.apache.kafka.clients.consumer.PartitionAssignor接口,可根据业务需求自定义分区分配逻辑。例如,按消息类型将特定分区分配给指定 Consumer:

public class CustomPartitionAssignor implements PartitionAssignor {    @Override    public Subscription subscription(Set topics) {        return new Subscription(new ArrayList<>(), Collections.singletonMap("custom_config", "value"));    }     @Override    public Map assign(Cluster metadata, Map subscriptions) {        // 自定义分区分配逻辑    }        // 其他接口方法实现}

3.3 监控与运维

内置监控指标

Kafka 通过 JMX(Java Management Extensions)暴露大量监控指标,主要分为三类:

常用监控工具

# prometheus.yml配置示例scrape_configs:  - job_name: 'kafka'    static_configs:      - targets: ['kafka-broker-1:9100', 'kafka-broker-2:9100']  # JMX Exporter端口

  1. Kafka Manager:开源的 Kafka 集群管理工具,支持 Topic 创建、分区管理、集群状态监控等功能。
  2. Prometheus + Grafana:企业级监控方案,通过 Prometheus 采集 Kafka 指标,Grafana 可视化展示。需配置 JMX Exporter 作为中间件:
  3. Confluent Control Center:Confluent 提供的商业监控工具,支持 Kafka 集群、Schema Registry、Kafka Connect 等组件的全方位监控。

运维命令与故障排查

     1.查看 Consumer Group 消费滞后量

/opt/kafka/bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 \    --describe --group test_group

     2.手动重置消费位移

    /opt/kafka/bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 \    --group test_group --topic test_topic --reset-offsets --to-earliest --execute

         3.修复副本同步问题

      /opt/kafka/bin/kafka-replica-verification.sh --bootstrap-server localhost:9092 \    --topic test_topic --include-offline-partitions

            4.常见故障排查: 

        • 生产者无法连接 Broker:检查网络连通性、防火墙配置、bootstrap.servers参数。
        • 消费者消费滞后:检查 Consumer 性能、Topic 分区数、消息处理逻辑。
        • Broker 磁盘空间不足:清理过期日志、增加磁盘容量、调整log.retention.hours参数。

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

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

        相关文章

        MySQL——事务 - 教程

        pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

        设计师工作室网站网页设计实训报告2000字通用

        在Web程序中&#xff0c;验证码是经常使用的技术之一。Web程序永远面临未知用户和未知程序的探测。为了防止恶意脚本的执行&#xff0c;验证码技术无疑是首选方案之一。本文将讨论如何在JSP和Servlet中使用验证码技术。 验证码的产生思路很简单&#xff0c;在Servlet中随机产生…

        详细介绍:几何绘图与三角函数计算应用

        详细介绍:几何绘图与三角函数计算应用pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…

        详细介绍:Hive在实际应用中,如何选择合适的JOIN优化策略?

        详细介绍:Hive在实际应用中,如何选择合适的JOIN优化策略?2025-10-05 14:43 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…

        【VM虚拟机】VM新版本,虚拟机中键盘输入延迟卡顿

        关键设置: 虚拟机路径下.vmx文件中添加 keyboard.vusb.enable = "TRUE" 其他什么core-数量,3D加速都不好使

        京东联盟 wordpress模板网站可以做优化

        摘要&#xff1a;本篇博客深入介绍了如何借助深度学习技术开发癌症图像检测系统&#xff0c;以提高医疗诊断的精度和速度。系统基于先进的YOLOv8算法&#xff0c;并对比分析了YOLOv7、YOLOv6、YOLOv5的性能&#xff0c;如mAP和F1 Score。详细解释了YOLOv8的原理&#xff0c;并附…

        2025石灰源头厂家最新推荐榜单:深度解析生石灰,熟石灰物流效率与综合实力

        当前石灰行业需求持续攀升,但市场乱象凸显:部分企业产能波动大、交货周期长,劣质产品充斥市场,技术落后与环保不达标问题频发,严重困扰下游采购决策。尤其在高活性、专用化产品需求年增 18% 的背景下,企业亟需权…

        AtCoder Beginner Contest 426 游记

        $20min$ 拿下四题,自信跳过看起来复杂的 E 去做数据结构 F,结果迷失在调线段树未能通过。省流 \(20min\) 拿下四题,自信跳过看起来复杂的 E 去做数据结构 F,结果迷失在调线段树未能通过。10.4 内含剧透,请vp后再来…

        广东手机网站制作价格进一步推进网站建设

        文章目录------------------------------学习教程篇-------------------------------bilibili哔哩哔哩网易云课堂siki学院&#xff1a;泰课在线&#xff1a;可汗学院&#xff1a;线性代数的本质 - bilibili计算机科学速成课 - bilibiliLearnOpenGL&#xff1a;The Book of Shad…

        淘宝客网站如何做推广方案wordpress接入微信支付

        程序员在编程过程中&#xff0c;经常会在代码中使用到“where 11”&#xff0c;这是为什么呢&#xff1f;SQL注入初次看到这种写法的同学肯定很纳闷&#xff0c;加不加where 11&#xff0c;查询不都一样吗&#xff1f;例如&#xff1a;select * from customers; 与 select * fr…

        如何把MCP服务集成到智能体?手把手教学(含视频教程)

        导航前言 视频讲解 作品展示 工作流程展示 操作步骤一 新建mcpserver工作流 二 测试智能体 三 发布智能体结语 参考AI+ 的时代已经来临,不管你是否愿意,你都必须去接受它。前言 在前面的文章《10min搭建一个大模型智…

        bootimg.exe检查验证备份导出的img镜像文件是否正常

        前言全局说明经常刷手机的人,必要做的就是先备份,那备份出的文件,是否正常,就要用 bootimg.exe 来验证注意:刷机,会丢失用户:照片、聊天等信息资料。请备份基带等信息。请慎重刷机 !!! 注意:刷机,会丢失用户:…

        华为云Flexus+DeepSeek征文|华为云Flexus服务器dify高效的平台通过自然语言转sql并执行搭建电商数据分析

        华为云Flexus+DeepSeek征文|华为云Flexus服务器dify高效的平台通过自然语言转sql并执行搭建电商数据分析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: …

        《独立开发者精选工具》第 019 期

        IndieTools 是一个专为独立开发者打造的精选工具和资源平台。通过直观的分类,轻松找到 Web 开发、设计、营销、SEO 等全流程实用工具。 独立开发者必备网站:https://www.indietools.work Github: https://github.com…

        备案个人可以做视频网站郑州 网站建设 东区

        抖音的转场动画—iOS https://www.jianshu.com/p/29b0165de712 抖音的上下滑实现—iOS https://www.jianshu.com/p/e8799510c7aa转载于:https://www.cnblogs.com/qingzZ/p/10281740.html

        什么网站做简历最好嘉兴网站排名优化报价

        总结: ●使用模板时必须确定出通用数据类型T,并且能够推争出一致的类型 #include<iostream> using namespace std; #include<string> #include<fstream>//函数模板注意事项 template<class T> //typename 可以替换成class void mySwap(T&a, T&am…

        实用指南:MyBatis 的动态 SQL

        pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

        活着,就像明天就要死去一样

        活着,就像明天就要死去一样本文来自博客园,作者:breezecn,转载请注明原文链接:https://www.cnblogs.com/breezecn/p/19126572

        社保网站人员减少怎么做三门峡住房和建设局网站

        Qt实现可伸缩的侧边工具栏 一直在网上找&#xff0c;发现大多的实现方案都是用一个按钮&#xff0c;按下控制侧边栏的伸缩&#xff0c;但是我想要实现鼠标悬浮在侧边栏的时候就伸出&#xff0c;移开就收缩的功能&#xff0c;也没找到好的参考&#xff0c;所以决定自己实现一个…