Kafka基础详解

Kafka基本概念

主题

将一组消息抽象归纳为一个主题(topic),一个主题是对消息的一个分类。生产者将消息发送到特定主题,消费者订阅主题或主题的某些分区进行消费

消息

kafka通信的基本单位,由一个固定长度的消息头和一个可变长度的消息体构成。Kafka消息格式经历3此变迁,分别为V0,V1,V2,目前大部分用户使用的仍是V1,完整格式如下所示:
image

分区

每个主题会被分成一个或多个分区(Partition)。每个分区由一系列有序、不可变的消息组成,是一个有序队列。

每个分区在物理上对应一个文件夹,分区的明明规则为:主题名称+’-’+分区编号(0,1,2,…)。

理论上,分区数越多吞吐量越高,分区是Kafka保证消息被顺序消费以及对消息进行负载均衡的基础。但Kafka只能保证一个分区之内消息的有序性,并不能保证跨分区消息的有序性。

Kafka的高吞吐率保障是每条消息被追加到相应的分区时,是顺序写磁盘。另外Kafka不会立即删除已被消费的消息,基于消息已存储的时间长度或分区的大小来清除老数据。

副本

每个分区又有一到多个副本(Replica),分区的副本分布在集群的不同机器,以提高可用性。从存储角度看,分区的每个副本在逻辑上抽象为一个日志(Log)对象。Kafka保证同一个partition的多个replica一定不会分散在同一台broker上。

Kafka需要保证分区中不同副本的数据一致性,因而会选出一个Leader副本,而分区的其他副本即为Follower副本。只有Leader副本才负责处理客户端读/写请求,Follower副本从Leader副本同步数据。

偏移量

任何发布到分区的消息会被直接追加到日志文件的尾部,而每条消息在日志文件中的位置都会对应一个按序递增的偏移量,他不表示消息在磁盘上的无力位置,只是一个分区下严格有序的逻辑值。

Kafka几乎不支持随机读写,因而没有提供额外索引机制。消费者可以通过控制消息偏移量来对消息进行消费,如消费者可以指定消费的起始偏移量,为了保证消息被顺序消费,消费者已消费的消息对应的偏移量也需要保存。

日志段

一个日志又被划分为多个日志段(LogSegement),日志段是Kafka日志对象分片的最小单位。一个日志段对应磁盘上的一个具体日志文件和两个索引文件,日志文件以".log"为后缀,用于保存消息实际数据;两个索引文件分别以".index"和’.timeindex"为文件名后缀,分别表示消息偏移量索引文件和消息时间戳索引文件

broker和集群

一个Kafka集群有一个或多个Kafka实例构成,每个Kafka实例可以称为broker,每个broker有一个唯一的非负整数标志id,也称为brokerId。

生产者

生产者负责将消息发送给代理,也即为向Kafka代理发送消息的客户端

消费者和消费组

消费者以拉去方式拉去数据,在Kafka中每一个消费者属于一个特定消费组,我们可以为每个消费者指定一个消费组,以groupId代表消费组名称。如果不指定消费组,则归属默认消费组test-consumer-group。

Kafka会为每个消费者生成一个全局唯一的id,格式为 g r o

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值