一、概念
1.1.kafka 是一个分布式的基于发布/订阅模式的消息队列
1.2.发布/订阅模式(一对多,消费者消费数据之后不会清除消息)
1.3.kafka 是消费者主动拉取的模式,所以是由消费者消费能力来决定的
缺点:消费者需要维护长轮询
时间消费者的消费消息的解耦,断点之后会接着上次消费的位置进行消费,类似flume
的taildir的功能(是存在本地文件系统的json文件),而kafka是通过zookeeper来管理的
所以zookeeper是帮助kafka集群来存储一些消息,帮助消费者来存储消费的位置信息
但是这是0.9版本之前是这样存的,但是在0.9版本之后就将 消费者的消费的位置存到了kafka, kafka将这些
数据存到本地磁盘但是有 默认7天的存储时间
二、文件和脚本
### 注意kafka的 创建的数据在 /usr/local/src/kafka_2.11-0.11.0.0/kafka-data目录下 ###
### 注意kafka的 日志数据在 /usr/local/src/kafka_2.11-0.11.0.0/logs ###
### kafka群起 开启 kk.sh start 关闭 kk.sh end ###
三、编写 kafka 群起脚本
#!/bin/bash
case $1 in
"start"){
for i in master slave1 slave2
do
echo "************$i************"
ssh $i "/usr/local/src/kafka_2.11-2.1.1/bin/kafka-server-start.sh -daemon /usr/local/src/kafka_2.11-2.1.1/config/server.properties"
done
};;
"stop"){
for i in master slave1 slave2
do
echo "************$i************"
ssh $i "/usr/local/src/kafka_2.11-2.1.1/bin/kafka-server-stop.sh"
done
};;
esac
四、生产和消费者
1.查看主题:kafka-topics.sh --list --zookeeper master:2181
2.创建主题为first,分区数为2,副本为2
kafka-topics.sh --create --zookeeper master:2181 --topic first --partitions 1 --replication-factor 1
存储机制
master first-0 first-1
slave1 first-1
slave2 first-0
3.描述主题:kafka-topics.sh --describe --topic first --zookeeper master:2181
4.删除主题:kafka-topics.sh --delete --zookeeper master:2181 --topic test
6.开启生产者(测试): kafka-console-producer.sh --topic first --broker-list master:9092
7.开启消费者(测试): kafka-console-consumer.sh --bootstrap-server master:9092 --topic first
8.开启消费者(测试) 从头开始获取数据 默认7天的存储时间
kafka-console-consumer.sh --bootstrap-server master:9092 --topic first --from-beginning
五、实践
实践一、
flume 配置信息
/usr/local/src/apache-flume-1.7.0-bin/job/file-flume-kafka.conf
开启配置
./bin/flume-ng agent -c conf/ -f ./job/log-flume-kafka.conf -n a1
实践二、
1.创建主题: kafka-topics.sh --create --zookeeper master:2181 --topic first --partitions 2 --replication-factor 2
2.开启生产者: kafka-console-producer.sh --topic first --broker-list master:9092
3.开启消费者(指定消费者组test):
kafka-console-consumer.sh --zookeeper master:2181 --topic first --consumer-property group.id=test(使用zookeeper的)
4.查看消费者偏移量
kafka-consumer-offset-checker.sh --zookeeper master:2181 --topic first --group test --broker-info
消费者组 主题 分区 消费索引 最大的消费数据长度 堆积量
Group Topic Pid Offset logSize Lag Owner
test first 0 3 3 0 test_master-1582430647689-c751beae-0
test first 1 3 3 0 test_master-1582430647689-c751beae-0
六、理解
5.1.kafka的物理存储,分区下的.log只存数据.index是定位数据的
5.2.生产者的消息会不断的追加到log文件末尾,为防止log文件过大导致数据定位效率低,kafka采用了分片和索引机制
5.3.使用zookeeper开启消费者,就可以到zkCli.sh里的consumers查看对应的数据
生产者输入一条信息: hello
zookeeper里的信息
controller是争抢资源的 get /controller
brokers kafka集群
consumers 消费者
5.4.总结
不同组可以同时消费
同一个组的不同消费者只能消费一个分区里的数据,当消费者组里的消费者发生变化时会重新分配消费的分区