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

Kafka 概念与概述

一、Kafka 概念

Apache Kafka 是一个分布式流处理平台,核心特点是高吞吐量、可持久化、可扩展。它既可以作为 消息队列,也可以作为 流数据平台

Kafka 的核心目标:

  1. 消息传递:服务间异步通信。
  2. 日志存储:保留历史消息,支持回溯。
  3. 流处理:处理实时数据流(结合 Kafka Streams / Flink / Spark Streaming)。

二、Kafka 核心概念

名称说明
Producer消息生产者,发送消息到 Kafka
Consumer消费者,从 Kafka 订阅和消费消息
Topic消息主题,逻辑上的分类
PartitionTopic 的分区,保证消息顺序性和并行性
BrokerKafka 服务节点,多个 Broker 组成集群
Zookeeper / KRaftKafka 元数据管理(Zookeeper 老模式 / KRaft 新模式)
Consumer Group消费者组,实现消息负载均衡与容错

三、Kafka 特性

  1. 高吞吐:百万级消息/秒,支持水平扩展。

  2. 消息持久化:消息写入磁盘,可设置保留时间。

  3. 顺序保证:Partition 内消息顺序有保障。

  4. 容错能力:Replica 机制,Leader-Follower 模式。

  5. 多种消费模式

    • 点对点:单消费者消费消息
    • 发布/订阅:多个消费者订阅同一 Topic

四、Kafka 在微服务中的应用场景

  1. 异步解耦:服务间无需直接调用,降低耦合。

    • 例:订单服务生成订单 → 发送消息到 Kafka → 库存服务消费消息扣减库存。
  2. 流处理

    • 实时统计、数据清洗、实时推荐。
  3. 事件溯源

    • 事件驱动架构(EDA),每个事件都可回溯。
  4. 日志系统

    • 将系统日志或业务日志发送到 Kafka,再通过 ELK 分析。

五、Kafka 集群架构(简化示意)

+-----------+        +-----------+        +-----------+
| Producer  | ---->  |  Broker 0 | ---->  | Consumer |
+-----------+        +-----------+        +-----------+/      \+-----------+ +-----------+| Broker 1  | | Broker 2  |+-----------+ +-----------+Replication Factor = 3

说明

  • Topic 分为多个 Partition。
  • 每个 Partition 有一个 Leader 和 N 个 Follower。
  • Producer 发送消息到 Partition Leader。
  • Consumer 从 Partition Leader 或 Follower 拉取消息。
  • Replica 保证高可用。

六、Java 使用 Kafka 示例

1. Maven 依赖

<dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.5.1</version>
</dependency>

2. 生产者示例

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");KafkaProducer<String, String> producer = new KafkaProducer<>(props);
ProducerRecord<String, String> record = new ProducerRecord<>("test-topic", "key1", "Hello Kafka");
producer.send(record);
producer.close();

3. 消费者示例

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "group1");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Arrays.asList("test-topic"));while(true){ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));for (ConsumerRecord<String, String> record : records) {System.out.printf("offset=%d, key=%s, value=%s%n", record.offset(), record.key(), record.value());}
}

七、Kafka 与云原生结合

  1. 容器化:Kafka 可在 Docker / Kubernetes 中部署。

  2. K8s Operator:使用 Strimzi/Kafka Operator 简化 Kafka 集群管理。

  3. 微服务解耦

    • Spring Boot + Spring Cloud Stream 集成 Kafka。
    • 使用 Kafka 作为微服务事件总线。
  4. 弹性扩容

    • Partition 数量可调整,Consumer Group 动态伸缩。
  5. 可观测性

    • Prometheus + Grafana 监控 Broker、Topic、Consumer lag。
    • Kafka Exporter 提供指标。

八、微服务架构中 Kafka 的优势

  • 消息异步传递,减少服务阻塞。
  • 高可用、水平扩展,适合大规模系统。
  • 支持事件驱动架构,系统更灵活。
  • 可持久化消息,实现日志和事件溯源。
  • 与云原生环境高度兼容,支持容器化和自动伸缩。
http://www.xdnf.cn/news/1352377.html

相关文章:

  • 在TencentOS3上部署OpenTenBase:从入门到实战的完整指南
  • 【Java学习笔记】18.反射与注解的应用
  • 遥感机器学习入门实战教程|Sklearn案例⑧:评估指标(metrics)全解析
  • tcpdump命令打印抓包信息
  • 【golang】ORM框架操作数据库
  • 2-5.Python 编码基础 - 键盘输入
  • STM32CubeIDE V1.9.0下载资源链接
  • 醋酸镨:催化剂领域的璀璨新星
  • LangChain4J-基础(整合Spring、RAG、MCP、向量数据库、提示词、流式输出)
  • 信贷模型域——信贷获客模型(获客模型)
  • 温度对直线导轨的性能有哪些影响?
  • 小白向:Obsidian(Markdown语法学习)快速入门完全指南:从零开始构建你的第二大脑(免费好用的笔记软件的知识管理系统)、黑曜石笔记
  • 数字经济、全球化与5G催生域名新价值的逻辑与实践路径
  • 快速掌握Java非线性数据结构:树(二叉树、平衡二叉树、多路平衡树)、堆、图【算法必备】
  • vue3 - 组件间的传值
  • 【小沐学GIS】基于Godot绘制三维数字地球Earth(Godot)
  • 计算机网络 TLS握手中三个随机数详解
  • 【Golang】有关垃圾收集器的笔记
  • 语义通信高斯信道仿真代码
  • GaussDB 数据库架构师修炼(十八) SQL引擎-计划管理-SQL PATCH
  • Base64编码、AES加密、RSA加密、MD5加密
  • RAG Embeddings 向量数据库
  • 使用Ollama部署自己的本地模型
  • 疯狂星期四文案网第48天运营日记
  • 12 SQL进阶-锁(8.20)
  • Python语法速成课程(二)
  • 科技赋能,宁夏农业绘就塞上新“丰”景
  • 进程的概念:进程调度算法
  • 【GPT入门】第57课 详解 LLamaFactory 与 XTuner 实现大模型多卡分布式训练的方案与实践
  • rust语言 (1.88) egui (0.32.1) 学习笔记(逐行注释)(七) 鼠标在控件上悬浮时的提示