Kafka

265 阅读3分钟

一、概念

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 监控本地文件 将数据打到 kafka test主题, kfaka来消费 ###
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

实践二、
# 看消费者组的数据,使用zookeeper来开启消费者
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.总结
不同组可以同时消费
同一个组的不同消费者只能消费一个分区里的数据,当消费者组里的消费者发生变化时会重新分配消费的分区