Coordinator存储的信息

对于每个Consumer Group,Coordinator会存储以下信息:

  1. 对每个存在的topic,可以有多个消费组group订阅同一个topic(对应消息系统中的广播)
  2. 对每个Consumer Group,元数据如下:
    订阅的topics列表
    Consumer Group配置信息,包括session timeout等
    组中每个Consumer的元数据。包括主机名,consumer id
    每个正在消费的topic partition的当前offsets
    Partition的ownership元数据,包括consumer消费的partitions映射关系;

kafka分区:

如果分区数大于消费者实例个数,按照抽屉原理,必定有一个消费者同时负责多个分区(2个 or 以上)

如果分区数等于消费者实例个数,正好一个消费者消费一个分区

如果分区数小于消费者实例个数,必然有消费者空闲

那么kafka的分区策略,


Kafka中大量使用了页缓存,这是Kafka实现高吞吐的重要因此之一。虽然消息都是先被写入页缓存,然后由操作系统负责具体的刷盘任务,但在Kafka中同样提供了同步刷盘及间断性强制刷盘(fsync)的功能,这些功能可以通过log.flush.interval.message、log.flush.interval.ms等参数来控制。同步刷盘可以提高 消息的可行性,防止由于机器掉电等异常造成处于页缓存而没有及时写入磁盘的消息丢失。不过一般不建议这么做,刷盘任务就应交由操作系统去调配,消息的可靠性应该由多副本机制来保障,而不是由同步刷盘这种严重影响性能的行为来保障。

kafka快速的原因:

Cache Filesystem Cache PageCache缓存

顺序写 由于现代的操作系统提供了预读和写技术,磁盘的顺序写大多数情况下比随机写内存还要快。

Zero-copy 零拷技术减少拷贝次数

Batching of Messages 批量量处理。合并小的请求,然后以流的方式进行交互,直顶网络上限。

Pull 拉模式 使用拉模式进行消息的获取消费,与消费端处理能力相符。