Kafka中的主题(Topic)是什么?有什么作用?

Kafka 中的主题(Topic)是消息流的逻辑名称。每个主题都会拥有多个分区并分布在多个 Broker 上。

主题的主要作用有:

  1. 消息分类:通过Topic将不同种类的消息分类,生产者生产消息时会指定消息所属的Topic。
  2. 幂等性保证:具有相同键(Key)和Topic的消息会被发布到同一个分区,保证消息的顺序性。
  3. 吞吐量扩展:每个Topic都包含多个分区,分布在多个Broker上,因此通过增加分区数可以扩展Topic的吞吐量。
  4. 副本备份:每个分区都有多个副本,因此即使部分Broker失效,消息也不会丢失。
  5. 权限控制:Kafka支持对Topic级别进行权限控制,管理员可以指定用户只能访问特定Topic。

例如,我们可以将用户行为日志分类到 Topic user_logs,产品日志分类到 Topic product_logs。
生产者生产 user_logs 消息时会指定消息键为用户 ID,这样具有相同用户 ID 的消息会发布到同一个分区,保证消息有序。
我们可以给 user_logs 创建10个分区分布在5个Broker上,从而 supporter 高达500K/s的消息吞吐量。

再例如,我们可以指定用户 Alice 只有 user_logs Topic 的消费权限,Bob 只有 product_logs 的权限,以实现权限隔离。

Topic是Kafka实现高吞吐、有序、高可靠的基石。理解Topic的作用机制可以让我们在设计阶段选择更优的Topic配置和数据分类方案。