【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
2.2 Partition 分区
- KafkaConsumer 可以保证单个消息在Partition内的读取顺序,但是无法保证再整个 topic 的顺序,上图是3个消费者消费了4个Partition,Partition数量可以大于Consumer,Consumer1读取Partition1+ Partition2,保证了Producer生产的消息都可以被读取到,若每个Consumer只能读取到1个Partition,那么势必有消息没法会被漏掉。
2.3 全流程汇总
-
Producer会将消息均衡写入全部 Partition 的某个 Partition,注意:每个 Partition 都有N个副本 replica(1个主副本,N-1个从副本),其中,leader replica处理读写请求,剩下的 follower replica只负责复制备份,具体有几个副本,由参数 replication.factor 设置。复制系数 N 越大,越占磁盘空间,但是可靠性更强。
-
为了减少网络开销,消息是分批次写入Kafka的,类似于redis中的zadd要一批批写,别一个个写。具体每批次几条消息,可以由 batch.size 来控制,收集消息的超时时间由linger.ms参数控制。但是需要对吞吐量与时间延迟作出权衡。批次内消息量越大,单位时间内要处理出的消息就会越多,单条消息的传输时间就会越长,毕竟你得等人齐了才会发车。此外,批次消息会被压缩,压缩后可以调高数据的传输和存储能力,但是需要付出额外的cpu计算。
-
关于Partition数量与Consumer数量的关系:
a. 假如Partition数量 > Consumer数量,那么一个Consumer可以读取多个分区,保证全部分区的消息都能被消费到。
b. 假如Partition数量 = Consumer数量,那么一对一,刚刚好。
c. 假如Partition数量 < Consumer数量,那么会有一部分Consumer未能抢占到Partition空闲着。
2.4 硬件相关
- 未完待续…
本文地址:https://blog.csdn.net/Sword52888/article/details/107329291