KAFKA的安装及配置
开源网站下载
http://kafka.apache.org/downloads/kafka_2.12-2.5.0.tgz
解压后配置文件的修改
KAFKA的启动
首先确认zk集群已经启动,然后bin目录启动KAFKA
Sh kafka-server-start.sh …/config/server.properties
控制台打印这种日志,说明KAFKA启动成功
KAFKA启动前后在zookeeper上的结点
TOPIC的介绍
在逻辑上可以被认为是一个queue;
用于对消息进行分类;
每一条消息都必须对应一个主题,而每一个主题中可以存放多条消息;
每一个topic会包含一个或者多个分区,分区对应于磁盘上的一个或多个目录,目录个数取决于Partitions 的配置;
- 创建topic
sh kafka-topics.sh --create --zookeeper yangjjhost:2181 --replication-factor 1 --partitions 1 --topic music
Topic创建完,
在/usr/soft/kafka/kafka_2.11-1.0.0/logs(bin/server.properties文件中log.dirs配置)下多出了一个和topic有关的music目录
yangjjhost:2181表示连接zk结点
Partitions N:表示该topic有N个分区目录。若N % 集群结点个数 == 0,分区目录会均等创建,N % 集群结点个数 != 0,分区目录不均等创建。
例如有yangjjhost和yangjjhost02两台KAFKA集群结点,执行命令sh kafka-topics.sh --create --zookeeper yangjjhost:2181 --replication-factor 1 --partitions 6 --topic gif
replication-factor M:表示该topic创建M(M<=集群中结点个数)个副本,N个分区目录在M台KAFKA结点上分别有相同的一份。 - 插看所有的topic
sh kafka-topics.sh --list --zookeeper yangjjhost:2181
- 删除topic
sh kafka-topics.sh --delete --zookeeper yangjjhost:2181 --topic picture
produce的介绍
- 消息放入jpg主题
sh kafka-console-producer.sh --broker-list yangjjhost:9092 --topic jpg
consumer的介绍
- 消费者从jpg主题拉取消息
sh kafka-console-consumer.sh --zookeeper yangjjhost:2181 --topic jpg --from-beginning
Consumer group的介绍
用消费者组的方式消费消息,会从上次处理完的位置,继续处理下一条消息,保证同一消费者从Kafka中不会重复消费数据。
- 创建消费者组
sh kafka-console-consumer.sh --bootstrap-server yangjjhost:9092,yangjjhost02:9092 --topic jpg --new-consumer
- 查看消费者所属消费组
sh kafka-consumer-groups.sh --bootstrap-server yangjjhost:9092 --list --new-consumer
OFFSET机制
采用消费组模式消费消息,就开启了KAFKA的OFFSET机制,此时在/usr/soft/kafka/kafka_2.11-1.0.0/logs目录下,发现多了50个OFFSET文件
- Consumer在从broker读取消息后,可以选择commit,该操作会在Kakfa中保存该Consumer在该Partition中读取的消息的offset
- Consumer下一次再读该Partition时会从下一条开始读取
- 通过这一特性可以保证同一消费者从Kafka中不会重复消费数据
- 若要计算message在哪个offset文件,可以通过组名的hash值对50取余计算。例如:“console-consumer-2084”.hashCode() % 50
- 计算得出,消费者读取消息的位置为offset-33
索引机制
-
在/usr/soft/kafka/kafka_2.11-1.0.0/logs(config/server.properties文件logs.dir属性配置的路径)
下有00000000000000000000.index 和 00000000000000000000.log目录(00000000000000000000为该数据文件中第一条消息的偏移量)。这是因为KAFKA不仅采用了OFFSET机制,还运用了索引机制 -
KAFKA将数据文件分段,每段放在一个单独的数据文件里,名称以该段最小偏移量命名,例如00000000000000000000.log。每个数据文件都会有一个与之对应的索引文件,例如00000000000000000000.index。00000000000000000000.log和00000000000000000000.index合起来称为一个Segment。
-
Index文件采用稀疏存储的方式,每隔一定字节的数据建立一条索引。这样避免了索引文件占用过多的空间,从而可以将索引文件保留在内存中。但缺点是没有建立索引的Message也不能一次定位到其在数据文件的位置,从而需要做一次二分法查找,以便快速定位到message的位置。