1. Kafka 应用场景

Kafka 作为一款高吞吐的分布式消息系统,适用于多种应用场景:

  • 消息队列:用于解耦生产者和消费者,提高系统的伸缩性。
  • 日志收集:集中存储和处理系统日志,方便分析和监控。
  • 流计算:处理实时数据流,将数据传输给实时计算系统进行计算。
  • 事件溯源:记录事件发生的历史,以便后续回溯和分析。
  • Metrics 采集:收集和存储系统的监控指标数据。

2. Kafka 组件介绍

Kafka 由多个核心组件组成:

  • 生产者(Producer):负责将消息发送到 Kafka。

  • 消费者(Consumer):从 Kafka 读取消息进行处理。

  • 消息代理(Broker):存储和管理消息,负责接收、存储和转发数据。

  • 协调器(Zookeeper):提供分布式协调和管理任务。

  • 主题(Topic):类似广播频道,生产者将消息发送到指定的 Topic,消费者从 Topic 读取消息。

    创建 Topic 命令示例:

    1
    kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 3 --topic my-topic
  • 分区(Partition):一个 Topic 进一步分为多个 Partition,可以提高数据局部性、支持并行处理,实现负载均衡。


3. Kafka 消息有序性

Kafka 的消息处理方式:

  • 不同分区的消息是并行处理的,因此 Kafka 全局上不保证消息的有序性
  • 同一分区内的消息是严格有序的,消费者会按照 offset 依次消费。

4. Offset(偏移量)

  • Kafka 中的每条消息都有唯一的 Offset(偏移量),从 0 开始递增。
  • Offset 用于追踪消息消费进度,每个消费者组都会维护自己的 Offset。

5. Consumer Group(消费者组)

  • 一个分区(Partition)只能由一个组员消费,保证分区数据不会被组内多个消费者重复消费。

  • 多个 Consumer Group 可以同时消费同一个 Topic,不同组之间不会相互影响。例如:

    • Group A 读取 Topic X 的消息一次。
    • Group B 也可以独立读取 Topic X 的消息一次。

这样,每个组都可以独立处理相同的消息,实现多用途消费。


6. 总结

  • Kafka 适用于消息队列、日志收集、流计算、事件溯源等场景。
  • 核心组件包括 Producer、Consumer、Broker、Zookeeper、Topic、Partition 等。
  • 消息的全局有序性无法保证,但 同一分区内是有序的
  • Offset 记录消息的消费进度,每个 Consumer Group 维护自己的 Offset。
  • 通过 Consumer Group 机制,可以控制消息的分发和重复消费。