Java学习第一百部分——Kafka

目录

一、前言提要

二、核心价值

三、核心架构

四、基本用途

五、优势总结

六、相关技术

七、详细用途

八、高级用法

九、最佳实践

十、总结定位


一、前言提要

       Apache Kafka 是一个强大的开源分布式流处理平台,专为处理高吞吐量、低延迟的实时数据流而设计。它最初由 LinkedIn 开发,后成为 Apache 软件基金会的顶级项目,如今是现代大数据生态系统的核心基础设施之一。

二、核心价值

  • 解耦生产者与消费者: 数据生产者(如应用日志、传感器、用户行为追踪)只需将数据发布到 Kafka,无需关心谁消费、何时消费。消费者按需订阅所需数据。

  • 高吞吐与低延迟: 每秒可处理数百万条消息,延迟可低至毫秒级,满足实时处理需求。

  • 持久化存储: 消息按配置策略(如时间或大小)持久存储在磁盘上,支持重播历史数据(消费者可调整偏移量重新消费)。

  • 可扩展性: 通过简单地增加服务器(Broker)即可线性扩展吞吐量和存储容量。

  • 容错性: 数据在集群中被复制(副本因子可配置),即使部分节点故障,数据也不会丢失,服务仍可用。

  • 流处理基础: 不仅传输数据,其 Kafka Streams 库和与流处理框架(如 Flink, Spark Streaming)的集成使其成为构建实时流处理应用的理想基石。

三、核心架构

1.  Broker

  • Kafka 集群由一台或多台服务器组成,每台服务器称为一个 Broker。

  • Broker 负责接收生产者消息、持久化存储消息、处理消费者拉取请求。

  • 集群通过 ZooKeeper(或较新版本的自研 KRaft 模式)进行协调管理(Leader 选举、元数据存储等)。

2.  Topic

  • 数据的类别或主题。 生产者将消息发布到特定的 Topic,消费者订阅感兴趣的 Topic 来消费消息。

  • 消息是字节数组,具体格式由生产者/消费者约定(如 JSON, Avro, Protobuf)。

3.  Partition

  • Topic 的物理分片。 一个 Topic 可以被分成多个 Partition。

  • 核心作用:并行处理与扩展——不同 Partition 可以分布在不同的 Broker 上,允许生产者和消费者并行读写(生产者消息根据分区策略路由到不同 Partition;消费者组内不同消费者可消费不同 Partition),极大提升吞吐量。顺序性保证——Kafka 仅保证单个 Partition 内消息的顺序性。 不同 Partition 的消息顺序无法保证。

  • 每条消息在 Partition 内有一个唯一的、单调递增的序列号,称为 Offset。

4.  Producer

  • 向 Kafka Topic 发布消息的客户端应用程序。

  • 负责将消息发送到 Topic 的特定 Partition(可指定 Key 或使用轮询等策略)。

  • 可配置消息确认机制(acks:0,1,all),平衡性能与数据可靠性。

5.  Consumer
(1)从 Kafka Topic 订阅并消费消息的客户端应用程序。
(2)通常组成 Consumer Group。

  • Consumer Group: 一组共同消费一个或多个 Topic 的 Consumers 的逻辑集合。

  • 负载均衡: Topic 的 Partition 会被分配给 Consumer Group 内的各个 Consumer。每个 Partition 在同一时间只能被同一个 Group 内的一个 Consumer 消费。通过增减 Consumer 数量实现自动负载均衡和扩展。

  • Offset 管理: Consumer 负责跟踪自己消费的进度(Offset)。Offset 通常存储在 Kafka 内部的 `__consumer_offsets` Topic 中。Consumer 可以提交 Offset(自动或手动),记录消费位置以便故障恢复或重播。

6.  Replica

  • 每个 Partition 有多个副本(副本因子可配置),分布在不同的 Broker 上,提供容错能力。

  • Leader Replica: 每个 Partition 有一个 Leader,负责处理该 Partition 的所有读写请求。

  • Follower Replica: 被动地、异步地从 Leader 复制数据。如果 Leader 失效,Kafka 会从 Follower 中选举出一个新的 Leader(通过 ZooKeeper/KRaft)。

  • ISR: In-Sync Replicas (同步副本集合)。包含 Leader 和那些与 Leader 数据差距在一定阈值内的 Follower。只有 ISR 中的副本才有资格被选举为新的 Leader。确保数据一致性和可用性。

7.  ZooKeeper / KRaft

  • 传统模式: Kafka 依赖 Apache ZooKeeper 来管理集群元数据(Broker 列表、Topic 配置、Partition Leader 信息、Consumer Group Offset - 旧版本)和进行 Leader 选举。ZooKeeper 是另一个分布式协调服务。

  • KRaft 模式: 新版本 Kafka(2.8+ 开始实验,3.0+ 逐步稳定)引入 **KRaft (Kafka Raft Metadata mode)**,使用 Kafka 自身实现的 Raft 共识协议来管理元数据,**完全替代 ZooKeeper**,简化了架构、部署和运维,提高了可扩展性。

四、基本用途

1.  消息队列 / 发布-订阅系统: 解耦微服务、异步通信、缓冲。
2.  流式数据管道: 在不同系统(数据库、搜索引擎、数据仓库、Hadoop、其他服务)之间可靠地传输实时数据流。例如:

  • 用户活动追踪 -> Kafka -> 实时分析/推荐系统

  • 应用日志 -> Kafka -> ELK (Elasticsearch, Logstash, Kibana) 堆栈

  • 数据库变更捕获 (CDC) -> Kafka -> 数据仓库 / 缓存更新

3.  流处理:

  • Kafka Streams: Kafka 自带的轻量级 Java 库,用于构建实时流处理应用(聚合、连接、窗口计算、状态管理等),直接在应用中处理 Kafka 数据。

  • ksqlDB:基于 Kafka Streams 构建的流式 SQL 引擎,允许用 SQL 查询和处理 Kafka 数据。

  • 与其他流处理引擎集成: 作为 Flink、Spark Streaming、Storm 等框架的可靠数据源和输出端。

4.  事件溯源: 将应用程序状态的变化记录为一序列不可变的事件(存储在 Kafka Topic 中),可用于重建状态、审计、实现 CQRS。
5.  运营监控: 集中收集和传输服务器指标、应用日志进行实时监控和告警。

五、优势总结

  • 高性能: 极致优化的磁盘顺序读写、零拷贝技术、批处理、高效数据结构。

  • 高可靠: 数据持久化、多副本机制、ISR 保证。

  • 高扩展: 轻松添加 Broker 和 Consumer 应对增长。

  • 持久性与重播: 数据按需保留,消费者可灵活重播历史数据。

  • 生态繁荣: 庞大的社区支持,丰富的客户端库(多种语言),深度集成主流大数据和流处理工具。

六、相关技术

  • 消息队列: RabbitMQ, ActiveMQ, RocketMQ, Amazon SQS, Google Pub/Sub

  • 流处理平台: Apache Pulsar (也提供消息队列功能), Apache Flink, Spark Streaming

  • 日志聚合: Fluentd, Logstash

七、详细用途

1. 实时数据管道与系统集成

  • 场景说明:Kafka Connect实现异构数据源的无缝集成。例如金融场景中,通过JDBC连接器将关系数据库(如MySQL)的增量变更同步至Kafka主题,供下游实时分析系统消费。 

  • 典型案例:Uber使用Kafka Connect将司机和乘客应用的实时事件流传输至Hadoop数据湖,日均处理数万亿条消息。

2. 日志聚合与监控平台

  • 技术实现:客户端部署Filebeat/Fluentd采集日志,写入Kafka后接入Elasticsearch,通过Kibana可视化展示。 

  • 优势:高吞吐量(可达1500万条/秒)支撑海量日志实时处理,同时保留数据重放能力。

3. 物联网(IoT)数据处理

  • 应用模式:传感器数据写入Kafka后,通过Kafka Streams或Flink实时计算指标(如设备状态预测)。 

  • 案例:智能制造业中,Kafka处理设备传感器流数据,实时触发故障告警或优化生产调度。

4. 金融级事务保障
(1)关键需求:支付/订单系统需严格保证数据一致性。 
(2)Kafka方案: 

  • 生产者端:启用幂等性(`enable.idempotence=true`) + 事务(`transactional.id`配置),确保消息不重复。 

  • 消费者端:设置`isolation.level=read_committed`,仅消费已提交事务的消息。

5. 流式处理与实时分析 

  • 技术栈:Kafka Streams API实现低延迟转换。例如电商场景中,实时将用户行为流映射为“用户画像-商品”关联流,写入下游推荐主题。 

  • 优势:亚秒级延迟支持即时业务响应(如Netflix的实时视频推荐)。

八、高级用法

1. 数据集成高级技巧:Kafka Connect转换器

  • 问题:数据库字段名与目标JSON字段不匹配,或时间格式需转换。 

  • 解决方案:在Connect配置中内置转换器: 

transforms=ConvertDate,Rename                      transforms.ConvertDate.type=org.apache.kafka.connect.transforms.TimestampConverter$Value
transforms.ConvertDate.field=created_at  # 待转换字段
transforms.ConvertDate.format=yyyy-MM-dd HH:mm:ss
transforms.Rename.type=org.apache.kafka.connect.transforms.ReplaceField$Value
transforms.Rename.renames=old_name:new_name  # 字段重命名

ps:通过轻量级转换避免下游处理复杂性。

2. 消息语义精准控制

语义类型生产者配置消费者配置适用场景
At Least Onceacks=all业务处理成功后手动提交offset通用场景(容忍少量重复)
Exactly Once启用事务 + enable.idempotence=trueisolation.level=read_committed支付/订单(强一致性)
At Most Onceacks=0先提交offset后处理业务通知类(容忍丢失)

3. 百万级吞吐量优化策略
(1)分区设计: 

  • 分区数 ≥ 消费者数量,避免资源闲置。 

  • 自定义分区器(如粘性分区),提升批量发送效率: 

        public class StickyPartitioner implements Partitioner {@Overridepublic int partition(String topic, Object key, ...) {// 固定时间段内绑定相同分区return ... ;}}

(2)批量与压缩: 

  • 设置`linger.ms=10`(等待批量) + `batch.size=16384`(16KB批次)。 

  • 启用Snappy压缩(`compression.type=snappy`),减少网络负载40%+。

4. 复杂流处理模式
(1)延时队列: 

  • 方案:消息暂存内部主题(`delay_topic`),由独立服务检测到期后转发至目标主题。 

  • 适用:订单超时关单、定时通知等场景。 

(2)消息路由: 

  • 在Headers中添加`routingkey`,消费者通过拦截器按需过滤。

5. 运维与安全增强

  • 监控:跟踪Consumer Lag(延迟偏移量),预警消费瓶颈。 

  • 安全:启用SSL/TLS加密通信: 

     security.protocol=SSLssl.truststore.location=/path/to/truststore.jksssl.keystore.password=your_password

九、最佳实践

  • 性能优先场景:如日志收集,采用`At Least Once`语义 + 分区负载均衡。  

  • 强一致性场景:金融交易必选`Exactly Once`语义 + 事务机制。  

  • 扩展性设计:单个Topic分区数不超过集群Broker × 100(防文件句柄耗尽)。

  • 实践启示:Netflix、Uber等企业已验证Kafka在超大规模场景的可行性,但其高级功能(如事务、Connect转换器)需结合业务逻辑精细调参。对于延时队列等复杂需求,可参考的二级主题路由方案,平衡精度与复杂度。

  • 典型场景: 当需要处理海量实时数据流,要求高吞吐、低延迟、持久化存储、高可靠、可扩展,并可能涉及流处理时,Kafka 通常是首选。

十、总结定位

       Kafka是一个分布式、高吞吐、可水平扩展、持久化、容错的发布—订阅消息系统和流处理平台。

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

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

相关文章

[spring-cloud: 负载均衡]-源码分析

获取服务列表 ServiceInstanceListSupplier ServiceInstanceListSupplier 接口是一个提供 ServiceInstance 列表的供应者&#xff0c;返回一个响应式流 Flux<List<ServiceInstance>>&#xff0c;用于服务发现。 public interface ServiceInstanceListSupplier e…

Oracle 在线重定义

Oracle 在线重定义&#xff08;Online Redefinition&#xff09; 是一种功能&#xff0c;通过DBMS_REDEFINITION 包提供&#xff0c;允许DBA在不需要停止或显著影响数据库正常操作的情况下&#xff0c;对数据库表进行结构化修改。可以实现的功能将表移动到其它表空间增加、修改…

Web 开发 12

1 网址里的 “搜索请求” 结构 这张图是在教你怎么看懂 网址里的 “搜索请求” 结构&#xff0c;特别基础但超重要&#xff0c;对你学前端帮别人做搜索功能超有用&#xff0c;用大白话拆成 3 步讲&#xff1a; 1. 先看「协议&#xff08;Protocol&#xff09;」 HTTPS 就是浏…

网络安全 | 如何构建一个有效的企业安全响应团队

网络安全 | 如何构建一个有效的企业安全响应团队 一、前言 二、团队组建的基础要素 2.1 人员选拔 2.2 角色定位 三、团队应具备的核心能力 3.1 技术专长 3.2 应急处置能力 3.3 沟通协作能力 四、团队的运作机制 4.1 威胁监测与预警流程 4.2 事件响应流程 4.3 事后复盘与改进机制…

HTTP、WebSocket、TCP、Kafka等通讯渠道对比详解

在当今互联的数字世界中&#xff0c;通信渠道是系统、应用程序和设备之间数据交换的支柱。从传统的HTTP和TCP协议到专为特定场景设计的Kafka和MQTT等平台&#xff0c;这些通信方式满足了从实时消息传递到大规模数据流处理的多样化需求。本文将深入探讨主要的通信协议和平台。一…

臭氧、颗粒物和雾霾天气过程的大气污染物计算 CAMx模型

随着我国经济快速发展&#xff0c;我国面临着日益严重的大气污染问题。大气污染是工农业生产、生活、交通、城市化等方面人为活动的综合结果&#xff0c;同时气象因素是控制大气污染的关键自然因素。大气污染问题既是局部、当地的&#xff0c;也是区域的&#xff0c;甚至是全球…

数据结构(13)堆

目录 1、堆的概念与结构 2、堆的实现 2.1 向上调整算法&#xff08;堆的插入&#xff09; 2.2 向下调整算法&#xff08;堆的删除&#xff09; 2.3 完整代码 3、堆的应用 3.1 堆排序 3.2 Top-K问题 1、堆的概念与结构 堆是一种特殊的二叉树&#xff0c;根结点最大的堆称…

C++模板知识点3『std::initializer_list初始化时逗号表达式的执行顺序』

std::initializer_list初始化时逗号表达式的执行顺序 在使用Qt Creator4.12.2&#xff0c;Qt5.12.9 MinGW开发的过程中发现了一个奇怪的现象&#xff0c;std::initializer_list<int>在初始化构造时的执行顺序反了&#xff0c;经过一番测试发现&#xff0c;其执行顺序可正…

【Unity3D】Shader圆形弧度裁剪

片元着色器&#xff1a; float3 _Center float3(0, 0, 0); float3 modelPos i.modelPos;// float angle atan2(modelPos.y - _Center.y, modelPos.x - _Center.x); // 计算角度&#xff0c;范围-π到π float angle atan2(modelPos.y - _Center.y, modelPos.z - _Center.z)…

curl发送文件bodyParser无法获取请求体的问题分析

问题及现象 开发过程使用curlPUT方式发送少量数据, 后端使用NodeJSexpress框架bodyParser,但测试发现无法获取到请求体内容,现象表现为req.body 为空对象 {} 代码如下: const bodyParser require(body-parser); router.use(/api/1, bodyParser.raw({limit: 10mb, type: */*}))…

Vue3 学习教程,从入门到精通,Vue 3 内置属性语法知识点及案例代码(25)

Vue 3 内置属性语法知识点及案例代码 Vue 3 提供了丰富的内置属性&#xff0c;帮助开发者高效地构建用户界面。以下将详细介绍 Vue 3 的主要内置属性&#xff0c;并结合详细的案例代码进行说明。每个案例代码都包含详细的注释&#xff0c;帮助初学者更好地理解其用法。1. data …

机器学习基石:深入解析线性回归

线性回归是机器学习中最基础、最核心的算法之一&#xff0c;它为我们理解更复杂的模型奠定了基础。本文将带你全面解析线性回归的方方面面。1. 什么是回归&#xff1f; 回归分析用于预测连续型数值。它研究自变量&#xff08;特征&#xff09;与因变量&#xff08;目标&#xf…

OneCodeServer 架构深度解析:从组件设计到运行时机制

一、架构概览与设计哲学1.1 系统定位与核心价值OneCodeServer 作为 OneCode 平台的核心服务端组件&#xff0c;是连接前端设计器与后端业务逻辑的桥梁&#xff0c;提供了从元数据定义到应用程序执行的完整解决方案。它不仅是一个代码生成引擎&#xff0c;更是一个全生命周期管理…

Jwts用于创建和验证 ​​JSON Web Token(JWT)​​ 的开源库详解

Jwts用于创建和验证 ​​JSON Web Token&#xff08;JWT&#xff09;​​ 的开源库详解在 Java 开发中&#xff0c;提到 Jwts 通常指的是 ​​JJWT&#xff08;Java JWT&#xff09;库​​中的核心工具类 io.jsonwebtoken.Jwts。JJWT 是一个专门用于创建和验证 ​​JSON Web To…

如果发送的数据和接受的数据不一致时,怎么办?

那ART4222这个板卡举例&#xff0c;我之间输入一个原始数据“6C532A14”&#xff0c;但是在选择偶校验时&#xff0c;接收的是“6C532B14”&#xff0c;我发送的码率&#xff08;运行速度&#xff09;是100000&#xff0c;但接受的不稳定&#xff0c;比如&#xff1b;“100100.…

ISCC认证:可持续生产的新标杆。ISCC如何更快认证

在全球可持续发展浪潮中&#xff0c;ISCC&#xff08;国际可持续与碳认证&#xff09;体系已成为企业绿色转型的重要工具。这一国际公认的认证系统覆盖农业、林业、废弃物处理等多个领域&#xff0c;通过严格的可持续性标准、供应链可追溯性要求和碳排放计算规范&#xff0c;建…

想对学习自动化测试的一些建议

Python接口自动化测试零基础入门到精通&#xff08;2025最新版&#xff09;接触了不少同行&#xff0c;由于他们之前一直做手工测试&#xff0c;现在很迫切希望做自动化测试&#xff0c;其中不乏工作5年以上的人。 本人从事软件自动化测试已经近5年&#xff0c;从server端到web…

电子电气架构 ---智能电动汽车嵌入式软件开发过程中的block点

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

createAsyncThunk

下面&#xff0c;我们来系统的梳理关于 Redux Toolkit 异步操作&#xff1a;createAsyncThunk 的基本知识点&#xff1a;一、createAsyncThunk 概述 1.1 为什么需要 createAsyncThunk 在 Redux 中处理异步操作&#xff08;如 API 调用&#xff09;时&#xff0c;传统方法需要手…

STM32F103C8T6 BC20模块NBIOT GPS北斗模块采集温湿度和经纬度发送到EMQX

云平台配置 访问下载页面&#xff1a;免费试用 EMQX Cloud 或 EMQX Enterprise | 下载 EMQX&#xff0c;根据需求选择对应版本下载。将下载的压缩包上传至服务器&#xff08;推荐存放于C盘根目录&#xff0c;便于后续操作&#xff09;&#xff0c;并解压至指定路径&#xff08…