一、# 基础知识
1、安装
- 部署一台ZooKeeper服务器;
- 安装jdk;
- 下载kafka安装包;
- 上传安装包到kafka服务器上:/usr/local/kafka;
- 解压缩压缩包;
- 进入到config目录,修改server.properties配置信息:
#broker.id属性在kafka集群中必须要是唯⼀
broker.id=0
#kafka部署的机器ip和提供服务的端⼝号
listeners=PLAINTEXT://192.168.65.60:9092
#kafka的消息存储⽂件
log.dir=/usr/local/data/kafka-logs
#kafka连接zookeeper的地址
zookeeper.connect=192.168.65.60:2181
- 进入到bin目录,使用命令启动kafka服务器(带配置文件)
./kafka-server-start.sh -daemon ../config/server.properties
- 检查kafka是否启动成功:
进入到zk内查看是否有kafka节点:
/brokers/ids/0
2、基本概念
名称 |
说明 |
---|---|
Broker |
消息中间件处理节点,一个kafka节点为一个broker,一个或者多个broker组成一个kafka集群 |
Topic |
消息主题。kafka根据topic对消息进行分类,发布到kafka集群的每条消息都需要指定一个topic |
Partition |
Topic在物理上的分区,一个Topic可以分为多个Partition,每个Partition是一个有序的记录序列。 |
Replica |
Partition的副本 |
Producer |
消息生产者。向broker发送消息的客户端。 |
Consumer |
消息消费者。从broker读取消息的客户端。 |
Consumer Group |
消费组。一个消费组可以包含一个或者多个消费者,每条消息只能被消费组的某个消费者消费 |
3、主题创建
- 通过kafka命令向zk中创建一个主题
./kafka-topics.sh --create --zookeeper 172.16.253.35:2181 --replicationfactor 1 --partitions 1 --topic test
- 查看当前zk中所有的主题
./kafka-topics.sh --list --zookeeper 172.16.253.35:2181 test
4、发送消息
把消息发送给broker的某个topic,打开一个kafka发送消息的客户端,然后开始用客户端向kafka服务器发送消息。
./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --topic test
5、消费消息
打开一个消费消息的客户端,向kafka服务器的某个主题消费消息。
生产者将消息发送给broker,broker会将消息保存到本地的日志文中。/usr/local/kafka/data/kafka-logs/主题-分区/00000000.log;消息的保存是有序的,通过offset偏移量来描述消息的有序性;消费者消费消息时也是通过offset来描述所要消费消息的位置。
- 方式一:从当前主题中的最后一条消息的offset + 1 开始消费:
./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --topic test
- 方式二:从当前主题的第一条消息开始消费
./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --from-beginning --topic test
6、单播&&多播消息
如果多个消费者在同一个消费组,那么只有一个消费者可以订阅到topic中的消息。即,同一个消费组中只能有一个消费者收到一个topic中的消息。
不同的消费组订阅同一个topic,那么不同消费组中各只有一个消费者能收到消息。
./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --consumer-property group.id=testGroup1 --topic test
./kafka-console-consumer.sh --bootstrap-server 172.16.253.38:9092 --consumer-property group.id=testGroup2 --topic test
7、查看消费组信息
/kafka-consumer-groups.sh --bootstrap-server 172.16.2