kafka

2026年2月11日 · 121 字 · 1 分钟

简要介绍kafka以及golang操作kafka

kafka

原理

Kafka 架构主要由三部分组成:生产者 (Producer)Broker (Kafka Server)消费者 (Consumer)。生产者将消息发送到 Broker,Broker 负责存储并转发消息,消费者从 Broker 订阅并消费数据。

  • Broker 部署:理论上一台服务器上可以启动多个 Broker(即 Kafka 进程,每个进程单独占一个端口号),实践中一般一台服务器上启一个 Broker。
  • 数据分类:某一种业务数据使用一个 Topic,比如首页推荐流用户的点击日志。
  • 负载均衡:同一个 Topic 的数据分成多个 Partition 是为了分散负载(一个 Partition 就是一个文件夹),跟消费机制有关。
  • 高可用性:同一份 Partition 数据又有多个备份(一个 Leader 多个 Follower),提高可靠性,这跟生产机制有关。

  • 消费者组 (Consumer Group):一个 Group 对应一个使用数据的业务方。比如首页推荐流用户的点击日志,推荐团队需要消费,广告团队也需要消费。
  • 数据分配:每个 Group 消费一份完整的 Topic 数据。

  • 对于同一个 Group 而言)一个 Partition 只能由一个 Consumer 来消费,一个 Consumer 可以消费多个 Partition。所以 Consumer 数小于 Partition 数时才有意义。
  • Consumer 越多,吞吐越高,消费得越快。
  • Consumer 增加或减少时,Partition 和 Consumer 的对应关系会自动调整(例如使用 HashRing 算法)。

如果有必要,Consumer 可以指定 Partition 进行消费,但不能同时指定 GroupID。

术语

  • 消息 (Message):Kafka 的数据单元。消息由字节数组组成。
  • 批次 (Batch):一组属于同一个主题和分区的消息。
  • 主题 (Topic):Kafka 消息的分类单元,类似于数据库的表。
    • 不同主题的消息是物理隔离的。
    • 同一个主题的消息可以保存在一个或多个 Broker 上。
    • 一个主题包含一个或多个分区。
  • 分区 (Partition):一个有序不变的消息序列,消息以追加的方式写入分区,并按 FIFO 顺序读取。Kafka 通过分区来实现数据冗余和伸缩性。
  • 消息偏移量 (Offset):表示分区中每条消息的位置信息,是一个单调递增且不变的值。
  • 生产者 (Producer):发布新消息的 Kafka 客户端。负责将消息分配到主题中的特定分区。
  • 消费者 (Consumer):订阅新消息的 Kafka 客户端。通过检查偏移量来区分消息是否已读。
  • 消费者群组 (Consumer Group):多个消费者构成的群组,共同消费多个分区以实现高并发能力。
    • 每个消费者属于一个特定的群组(默认有默认群组)。
    • 群组内一个消费者可以消费多个分区。
    • 重要规则:在同一个群组内,每个分区只能被分配给一个消费者。
  • 再均衡 (Rebalance):当消费者组内成员变动(如某个实例挂掉)时,自动重新分配主题分区的过程。这是 Kafka 消费者端实现高可用的重要手段。
  • Broker:一个独立的 Kafka 服务器。Broker 接受来自生产者的消息,设置偏移量并提交到磁盘,同时响应消费者的请求。
  • 副本 (Replica):分区的备份,用于提供数据冗余。
    • 分为领导者副本(Leader)和追随者副本(Follower)。
    • 副本是分区层级的,每个分区可配置多个副本以实现高可用。