欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【Kafka】图解

程序员文章站 2022-03-10 23:08:26
图解kafka...

我的原则:先会用再说,内部慢慢来。
学以致用,根据场景学源码


一、基础概念

  • Broker
    一个独立的kafka服务器被称为 broker。消息中间件处理节点,一个或者多个Broker可以组成一个Kafka集群。broker接收producer的消息,将消息保存在磁盘,也为consumer提供服务,对读取分区的请求作出响应,返回消息。

  • Topic
    每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。

  • Partition
    用于存放消息的队列,存放的消息都是有序的,同一主题可以分多个Partition,如分多个Partiton时,同样会以如partition1存放1、3、5消息,partition2存放2、4、6消息

  • Producer
    消息生产者,向Broker发送消息的客户端。

  • Consumer
    消息消费者,从Broker读取消息的客户端,Consumer是通过offset 识别读取位置。Consumer与partition之间的映射关系称为Consumer对partition的所有权关系。

  • Consumer Group
    每个Consumer属于一个特定的Consumer Group,一条消息可以发送到多个不同的Consumer Group,但是同一个Consumer Group中只能有一个Consumer能够消费该消息。

  • Offset
    偏移量 offset:不断递增的一个整数(consum 消息,递增offset),每个消息在不同的partition上的offset是不一样的,也是唯一的。

二、图解基本概念

2.1 Producer与Consumer

【Kafka】图解

2.2 Partition 分区

【Kafka】图解

  1. KafkaConsumer 可以保证单个消息在Partition内的读取顺序,但是无法保证再整个 topic 的顺序,上图是3个消费者消费了4个Partition,Partition数量可以大于Consumer,Consumer1读取Partition1+ Partition2,保证了Producer生产的消息都可以被读取到,若每个Consumer只能读取到1个Partition,那么势必有消息没法会被漏掉。

2.3 全流程汇总

【Kafka】图解

  1. Producer会将消息均衡写入全部 Partition 的某个 Partition,注意:每个 Partition 都有N个副本 replica(1个主副本,N-1个从副本),其中,leader replica处理读写请求,剩下的 follower replica只负责复制备份,具体有几个副本,由参数 replication.factor 设置。复制系数 N 越大,越占磁盘空间,但是可靠性更强。

  2. 为了减少网络开销,消息是分批次写入Kafka的,类似于redis中的zadd要一批批写,别一个个写。具体每批次几条消息,可以由 batch.size 来控制,收集消息的超时时间由linger.ms参数控制。但是需要对吞吐量与时间延迟作出权衡。批次内消息量越大,单位时间内要处理出的消息就会越多,单条消息的传输时间就会越长,毕竟你得等人齐了才会发车。此外,批次消息会被压缩,压缩后可以调高数据的传输和存储能力,但是需要付出额外的cpu计算。

  3. 关于Partition数量与Consumer数量的关系:
    a. 假如Partition数量 > Consumer数量,那么一个Consumer可以读取多个分区,保证全部分区的消息都能被消费到。
    b. 假如Partition数量 = Consumer数量,那么一对一,刚刚好。
    c. 假如Partition数量 < Consumer数量,那么会有一部分Consumer未能抢占到Partition空闲着。

2.4 硬件相关

【Kafka】图解

  • 未完待续…

本文地址:https://blog.csdn.net/Sword52888/article/details/107329291

相关标签: mq