相关知识点

概念组成

  • Producer 消息产生者,往指定 Topic 的指定 Partition 发送消息

  • Consumer Group 消费指定 Topic 的消息

    • Consumer 消费指定 Topic 下某一分区的消息
  • Topic 区分不同消息主题

    • Partition 保证同一分区的有序性
  • Connector

消息可被不同的 Consumer Group 重复消费(广播或订阅)。同一 Consumer Group 下的不同 Consumer 分别消费不同的 Partition,Consumer 数量不能超过 Partition 数量。

数据被持久化并分片成功后发送 ACK 保证里数据不被丢失。

设计

持久化

  • 基于文件系统

    • 基于队列是顺序的和磁盘的顺序访问要比内存的随机访问要快(参见 The Pathologies of Big Data), Kafka 采用在磁盘文件系统上尾部写头部读的方式。
    • Kafka 没有采用 BTree 存储数据因为 BTree 的操作是 O(log N) ,而且对磁盘的 seek 操作要慢,且同时只能进行一次限制了并行,所以实际操作比 O(log N) 要慢
    • 基于磁盘的顺序访问进行在尾部写和头部读,可以实现读写都是 O(1) 的时间复杂度,并且读写互不干扰
    • 基于以上实现,Kafka 可以不必在消息一经消费就删除,而是可以保留消息一段相对较长的时间(比如一周)
  • 高效

    并且采用统一的日志格式,可以方便的使用 sendfile 避免字节拷贝以在各个组件之间高效的交换日志文件

集群管理

查看消费状况

kafka-consumer-groups.sh --bootstrap-server 192.168.1.111:9092 --group cabbage --describe

重置消费

# 查看重置到最晚
kafka-consumer-groups.sh --bootstrap-server 192.168.1.111:9092 --group cabbage --topic xxx.topic --reset-offsets --to-latest --dry-run

# 执行重置到最晚
kafka-consumer-groups.sh --bootstrap-server 192.168.1.111:9092 --group cabbage --topic xxx.topic --reset-offsets --to-latest --execute


# 当前(最早)
kafka-consumer-groups.sh --bootstrap-server 192.168.1.111:9092 --group cabbage --topic xxx.topic --reset-offsets --to-current --dry-run

kafka-consumer-groups.sh --bootstrap-server 192.168.1.111:9092 --group cabbage --topic xxx.topic --reset-offsets --to-current --execute