一、概述
1、架构
- producer:消息生产者。
- consumer:消息消费者。
- broker:kafka集群的server,负责处理消息读、写请求,存储消息。
2、消息存储和生产模型
- 一个topic分成多个partition
- 每个partition内部消息强有序,其中的每个消息都有一个序号叫offset。
- 一个partition只对应一个broker,一个broker可以管理多个partition。
- 消息直接写入文件,并不存储在内存中。
- 根据时间策略(默认一周)删除,而不是消费完就删除。
- producer自己决定往哪个partition写消息,可以是轮询的负载均衡,或者是基于hash的partition策略。
3、 消息存储和消费模型
- consumer自己维护消费到哪个offset。
- 每个consumer都有对应的group。
- group内是queue消费模型:各个consumer消费不用的partition,一个消息在group内只消费一次。
- 各个group各自独立消费,互不影响。
二、安装 (node1、node2其它配置一致,broker.id不一样)
1、拷贝kafka_2.11-2.2.0目录、并解压。
2、进入config文件夹,并修改server.properties
- node1(192.168.1.102):
# brokerid,集群中的brokerid,每个机器不一样,累加
broker.id=0
# 端口
port=9092
# 如需外网访问
listeners=PLAINTEXT://192.168.1.10:9092
#文件存放路劲:需先创建文件夹
log.dirs=/data/local/kafka/data
# zookeeper链接
zookeeper.connect=node1:2021
- node2(192.168.1.103):
# brokerid,集群中的brokerid,每个机器不一样,累加
broker.id=1
# 端口
port=9092
# 如需外网访问
listeners=PLAINTEXT://192.168.1.103:9092
#文件存放路劲:需先创建文件夹
log.dirs=/data/local/kafka/data
# zookeeper链接
zookeeper.connect=node1:2021
三、启动
1、创建启动命令文件
nohup ./bin/kafka-server-start.sh ./config/server.properties > nohup.log 2>&1 &
2、添加权限
chmod u+x start.sh
3、启动zookeeper
4、启动(必须先启动zookeeper)
./start.sh
四、测试
1、查看topic集合
./bin/kafka-topics.sh --zookeeper node1:2181 --list
2、创建一个topic
# --zookeeper:zookeeper节点
# --partitions:partitions个数
# --replication-factor:副本个数
./bin/kafka-topics.sh --zookeeper node1:2181 --create --topic t0407 --partitions 2 --replication-factor 2
3、进入消费者
./bin/kafka-console-consumer.sh --bootstrap-server node1:9092 --from-beginning --topic t0407
4、进入生产者
./bin/kafka-console-producer.sh --broker-list node1:9092 --topic t0407
5、查看topic的消息数
./bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list node1:9092 --topic t0407 --time -1
6、查看消费者组的情况
./bin/kafka-consumer-groups.sh --bootstrap-server node1:9092 --describe --group group_name