kafka入门

发布于:2024-05-07 ⋅ 阅读:(21) ⋅ 点赞:(0)

kafka的核心部分由Scala编写

kafka的基本概念梳理:

1.主题(Topic)

kafka将一组消息抽象归纳为一个主题;

主题就是对消息的分类;

生产者将消息发送到特定主题,消费者订阅主题或主题的某些分区进行消费。

2.消息:kafka通信的基本单位,由固定长度的消息头+可变长度的消息体组成。老版本中一个消息称为message,新版本称为Record.

3.分区和副本:

一个主题被分成一个或多个分区(Partition),每个分区是一个有序队列;

分区在物理上对应为一个文件夹,命名规则为主题名-序号(从0开始),每个分区有1至多个副本(Replica);

分区的每个副本在逻辑上抽象为一个日志(Log)对象,分区的副本与日志对象是一一对应的;

分区越多,吞吐量越高;(why)

分区是kafka保证消息被顺序消费,及对消息进行负载均衡的基础;(why)

kafka只能保证一个分区内消息的有序性,不能保证跨分区的有序性;

4.Leader副本和Follower副本

客户端只需与Leader副本交互(Leader副本向Follower副本同步数据),以此来保证数据的顺序性和一致性。Follower与Leader的角色不是固定不变的,如果Leader失效,会通过相应的选举算法从Follower中选举出Leader副本。

5.偏移量

发布到分区的消息会直接追加到日志文件的尾部,每条消息在日志文件中的位置会对应一个按序递增的偏移量;

6.日志段(LogSegment)

一个日志被分成多个日志段(逻辑概念),日志段是日志对象分片的最小单位,一个日志段对应一个日志文件和两个索引文件。两个索引文件分别是:.index文件-消息偏移量索引文件,.timeindex文件-消息时间戳索引文件。

7.代理(broker)

服务器上一个kafka实例就是一个代理,也可以成为kafkaServer

8.生产者(Producer)

生产者负责将消息发送给代理,也就是向kafka代理发送消息的客户端;

9.消费者(Consumer)和消费组(ConsumerGroup)

消费者以拉取方式(pull)拉取数据,每个消费者属于一个特定的消费组(如未指定则进入默认消费组)group.id;

每个消费者有全局唯一的id:client.id

同一主题的同一消息只能被同一消费组的某一个消费者消费,但不同消费组的消费者可同时消费该消息;

消费组是用来实现主题消息广播和单播的手段;

10.ISR(In-Sync Replica)保存同步的副本列表

kafka在zookeeper中保存了一个动态的ISR,该列表中保存的是与Leader副本保持消息同步的所有副本对应的代理节点id。

如果一个Follower副本宕机或落后太多,则该Follower副本节点将从ISR列表移除。

11.ZooKeeper

kafka利用zookeeper保存元数据信息,包括:kafka代理节点信息、kafka集群信息、旧版消费者信息及其消费偏移量信息、主题信息、分区状态信息、分区副本分配方案信息、动态配置信息等

zookeeper操作:

启停zookeeper:zkServer.sh start/stop

查看状态:zkServer.sh status