Apache Kafka

Kafka流程分析-生产者

2020-05-01  本文已影响0人  傻子般白痴

Kafka 工作流程分析

1、Kafka生产过程分析

(1)写入方式

producer采用推(push)模式将消息发布到broker,每条消息都被追加(append)到分区(patition)中,属于顺序写磁盘(顺序写磁盘效率比随机写内存要高,保障kafka吞吐率)

(2)partition

说明:

分区原因:

分区依据:

public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) {
        List<PartitionInfo> partitions = cluster.partitionsForTopic(topic);
        // (1) 指定了patition,则直接使用该 Partition
        int numPartitions = partitions.size();
        if (keyBytes == null) {
            int nextValue = nextValue(topic);
            List<PartitionInfo> availablePartitions = cluster.availablePartitionsForTopic(topic);
            if (availablePartitions.size() > 0) {
                int part = Utils.toPositive(nextValue) % availablePartitions.size();
                return availablePartitions.get(part).partition();
            } else {
                // no partitions are available, give a non-available partition
                return Utils.toPositive(nextValue) % numPartitions;
            }
        } else {
            // hash the keyBytes to choose a partition
            return Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions;
        }
    }
(3)Replica(副本)
Replica流程
(4)写入流程

流程图:

producer写入流程
流程描述:

2、 Broker 保存消息

(1)存储说明
基于时间存储策略:默认保留168小时(log.retention.hours=168)  
基于大小保留策略:默认保留 1G(log.retention.bytes=1073741824)
(2)Zk存储结构
Zk存储结构

3、consumer flow

(1) 高级API与低级API
(2)Consumer Group(消费者组)

流程图:

Consumer Group
描述说明:
上一篇 下一篇

猜你喜欢

热点阅读