赞
踩
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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。