美文网首页Apache Kafka
Kafka流程分析-生产者

Kafka流程分析-生产者

作者: 傻子般白痴 | 来源:发表于2020-05-01 13:09 被阅读0次

Kafka 工作流程分析

1、Kafka生产过程分析

(1)写入方式

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

(2)partition

说明:

  • 消息发送时都被发送到一个topic,其本质就是一个目录,而topic是由一些Partition Logs(分区日志)组成.
  • 每个Partition中的消息都是有序的,生产的消息被不断追加到Partition log上,其中的每一个消息都被赋予了一个唯一的offset值。

分区原因:

  • 提升拓展性:每个Partition可以通过调整以适应它所在的机器,而一个topic又可以有多个Partition组成,因此整个集群就可以适应任意大小的数据了
  • 提高吞吐能力:在进行数据写入时以 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;
        }
    }
  • 对于已经指定了 partition 的,则直接使用该partition;
  • 未指定patition但指定key,通过对key的value进行hash出一个patition;
  • patition和key都未指定,使用轮询选出一个patition;
(3)Replica(副本)
Replica流程
(4)写入流程

流程图:

producer写入流程
流程描述:
  • producer先从zookeeper的 "/brokers/.../state"节点找到该partition的leader
  • producer将消息发送给该leader
  • leader将消息写入本地log
  • followers从leader pull消息
  • Follower将 pull到的消息写入本地log
  • Follower 写入成功值后向leader发送ACK
  • leader收到所有ISR中的replication的ACK后,增加HW
  • 向producer发送ACK

2、 Broker 保存消息

(1)存储说明
  • 物理上把topic分成一个或多个patition,每个patition物理上对应一个文件夹(该文件夹存储该patition的所有消息和索引文件)
  • Kafka读取特定消息的时间复杂度为O(1);
  • 消息数据是存储在partition文件夹下的*.log文件中的;
  • 消息存储时常有两个策略,分别为:
基于时间存储策略:默认保留168小时(log.retention.hours=168)  
基于大小保留策略:默认保留 1G(log.retention.bytes=1073741824)
(2)Zk存储结构
Zk存储结构

3、consumer flow

(1) 高级API与低级API
  • kafka提供了两套consumer API:高级Consumer API和低级Consumer API。
  • 高级API不需要自行去管理offset,partition replica等,系统通过Zk自行管理。(低级 API反之)
(2)Consumer Group(消费者组)

流程图:

Consumer Group
描述说明:
  • Consumer Group 由多个Consumer 组成,同时一个Consumer只有属于一个Consumer Group。
  • Consumer Group 保证了其订阅的Topic partition 会被该Consumer Group 中的Consumer消费。对于多个Consumer Group订阅了同一个Topic,每个Consumer Group之间互不影响。
  • 如果要实现一个消息被多个 consumer 消费,则可以将当consumer 单独添加到单独的Consumer Group中(反之,如果要实现一个消息 被一个 consumer 消费,则可以将当consumer 添加到同一个Consumer Group中)

相关文章

  • kafka生产消费

    Kafka消息生产及消费大体流程 发送流程 1、名词含义: 1)Producer :消息生产者,就是向kafka ...

  • Kafka_读写流程

    kafka集群 写 生产者和kafka集群之间的流程 1.生产者将数据封装到ProducerRecord中,将Pr...

  • Kafka流程分析-生产者

    Kafka 工作流程分析 1、Kafka生产过程分析 (1)写入方式 producer采用推(push)模式将消息...

  • kafka 生产者使用详解

    前言 看完本文你将学会以下知识: kafka 数据的生产大致流程 如何创建并使用 kafka生产者 kafka生产...

  • 图解Kafka消费者分区分配策略

    1. 分配策略的作用 我们在分析生产者的时候有专门写过文章分析生产者的分区分配策略 Kafka生产者的3种分区策略...

  • kafka低进阶

    1、kafka工作流程 Kafka中消息是以topic进行分类的,生产者生产消息,消费者消费消息,都是面向topi...

  • Kafka学习笔记(二)架构深入

    1. Kafka工作流程及文件存储机制 Kafka中消息是以topic进行分类的,生产者生产消息,消费者消费消息,...

  • 尚硅谷大数据技术之Kafka

    第3章 Kafka工作流程分析 3.1 Kafka生产过程分析3.1.1 写入方式producer采用推(push...

  • Kafka概述:深入理解架构

    本文主要讲解 Kafka 的架构包括工作流程和存储机制,以及生产者和消费者,最终大家会掌握 Kafka 中最重要的...

  • kafka0.8

    1、Kafka分为:生产者(producer),消费者(consumer) 2、生产者提交消息,给Kafka集群,...

网友评论

    本文标题:Kafka流程分析-生产者

    本文链接:https://www.haomeiwen.com/subject/gutqghtx.html