Kafka

Kafka 简介

Kafka 是一个分布式流处理平台,由 LinkedIn 开发并开源,主要用于构建实时数据管道和流式应用。其核心特性包括高吞吐、低延迟、可扩展性和持久性。

Kafka 核心概念

Broker :Kafka 集群中的单个服务器节点,负责消息存储和转发。
Topic :消息的分类名称,生产者将消息发布到特定 Topic,消费者订阅 Topic 获取消息。
Partition :Topic 的分区,每个 Partition 是一个有序、不可变的消息队列,支持并行处理。
Producer :向 Topic 发布消息的客户端。
Consumer :从 Topic 订阅并消费消息的客户端。
Consumer Group :一组共享消费负载的 Consumer,每个 Partition 仅由组内一个 Consumer 消费。
Offset:消息在 Partition 中的唯一标识,表示消费进度。

Kafka 架构

Kafka 采用分布式设计,核心组件包括:

  • Zookeeper:管理集群元数据(Broker、Topic、Partition 信息)和选举 Leader。
  • Broker 集群:存储消息并处理读写请求。
  • Producer/Consumer:通过 Broker 实现消息的发布与订阅。

Kafka 工作流程

  1. 消息发布:Producer 将消息发送到指定 Topic 的 Partition(可指定 Key 或轮询分配)。
  2. 消息存储:Broker 将消息持久化到磁盘,并按 Partition 分片存储。
  3. 消息消费:Consumer 从 Partition 拉取消息,并提交 Offset 记录消费进度。

Kafka 持久化与复制

  • 持久化:消息写入磁盘日志文件(Segment),支持定期清理或保留策略(时间/大小)。
  • 副本机制:每个 Partition 有多个副本(Replica),分为 Leader 和 Follower。Leader 处理读写,Follower 同步数据,确保高可用。

Kafka 高吞吐设计

  • 顺序读写:磁盘顺序 I/O 性能接近内存随机访问。
  • 批量发送:Producer 支持批量消息压缩与发送。
  • 零拷贝 :通过 sendfile 系统调用减少数据拷贝次数。

Kafka 应用场景

  • 日志收集:集中收集分布式系统日志。
  • 实时流处理:结合 Flink/Spark Streaming 处理实时数据。
  • 消息队列:解耦生产者和消费者,缓冲流量峰值。

Kafka 代码示例(Java)

Producer 示例

java 复制代码
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");

Producer<String, String> producer = new KafkaProducer<>(props);
producer.send(new ProducerRecord<>("my_topic", "key", "value"));
producer.close();

Consumer 示例

java 复制代码
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "test_group");
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(Collections.singletonList("my_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 监控与管理

  • Kafka Manager:可视化监控集群状态、Topic 和 Consumer Group。
  • JMX 指标:通过 JConsole 或 Prometheus 收集 Broker 性能数据(如请求延迟、流量)。

Kafka 与其他队列对比

  • VS RabbitMQ:Kafka 吞吐更高,适合大数据场景;RabbitMQ 支持复杂路由,适合传统消息队列。
  • VS RocketMQ:两者均支持高吞吐,RocketMQ 提供事务消息和顺序消息更强保证。

Kafka 常见问题

  • 消息丢失 :确保 Producer 使用 acks=all,Consumer 手动提交 Offset。
  • 重复消费:因 Offset 提交延迟或 Consumer 重启导致,需业务端幂等处理。
  • 分区不均:合理设计 Partition Key 或调整分区数。

通过以上详解,可以全面了解 Kafka 的核心原理、使用方法和应用场景。

相关推荐
_院长大人_8 小时前
Spring Boot 3.3 + Atomikos 分布式事务日志路径配置踩坑记录
spring boot·分布式·后端
Data 实验室8 小时前
TaskPyro “小龙虾版本”专业爬虫管理平台来了:AI+分布式+IM 机器人,一套搞定企业级爬虫调度
人工智能·分布式·爬虫
想你依然心痛8 小时前
HarmonyOS 5.0教育行业解决方案:基于分布式能力的沉浸式智慧课堂系统
分布式·wpf·harmonyos
霖霖总总9 小时前
[Redis小技巧29]从 Setnx 到 Redlock:Redis 分布式锁的演进之路与生产级实践
数据库·redis·分布式
七夜zippoe9 小时前
联邦学习实战:隐私保护的分布式机器学习——联邦平均与差分隐私
分布式·python·机器学习·差分隐私·联邦平均
传感器与混合集成电路9 小时前
从拉曼散射到相位解调:分布式光纤测井技术解析
分布式·架构
Evand J10 小时前
【MATLAB例程】基于EKF的分布式卡尔曼滤波,用于多个车辆的集群导航,融合IMU和GNSS、相对测量的UWB数据
开发语言·分布式·matlab
彭于晏Yan21 小时前
Redisson分布式锁
spring boot·redis·分布式
美好的事情能不能发生在我身上1 天前
Jmeter压测遇到的问题
java·分布式·jmeter
石逸凡1 天前
谈AI原生:本质、单体、群、分布式、数据库与计算机架构
数据库·分布式·ai-native