Kafka的基本知识
跳到导航
跳到搜索
1.Kafka 的安装
- 部署一台 ZooKeeper 服务器
- 安装 JDK
- 下载 Kafka 的安装包:https://kafka.apache.org/downloads
- 上传到 Kafka 服务器上:/usr/local/kafka
- 解压缩压缩包
- 进入到 config 目录内,修改 server.properties
# broker.id 属性在 Kafka 集群中必须要是唯一
broker.id
# Kafka 部署的机器 IP 和提供服务的端口号
listeners=PLAINTEXT://192.168.137.200:9092
# Kafka 的消息存储文件
log.dirs=/usr/local/kafka/data/kafka-logs
# Kafka 连接 ZooKeeper 的地址
zookeeper.connect=localhost:2181
- 进入到 bin 目录内,执行以下命令来启动 Kafka 服务器(带着配置文件)
[root@localhost bin]# ./kafka-server-start.sh -daemon ../config/server.properties
- 校验 Kafka 是否启动成功:
进入到 ZooKeeper 内查看是否有 Kafka 的节点:/brokers/ids/0
2. Kafka 中的一些基本概念
Kafka 中有这么些复杂的概念
名称 | 解释 |
---|---|
Broker | 消息中间件处理节点,一个 Kafka 节点就是一个 broker,一个或者多个Broker可以组成一个 Kafka 集群 |
Topic | Kafka 根据 topic 对消息进行归类,发布到 Kafka 集群的每条消息都需要指定一个 topic |
producer | 消息生产者,向 Broker 发送消息的客户端 |
Consumer | 消息消费者,从 Broker 读取消息的客户端 |
3.创建 topic
- 通过 Kafka 命令向 ZK 中创建一个主题
[root@localhost ~]# /usr/local/kafka/kafka_2.11-2.4.0/bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
Created topic test.
[root@localhost ~]#
- 查看当前 ZK 中所有的主题
[root@localhost ~]# /usr/local/kafka/kafka_2.11-2.4.0/bin/kafka-topics.sh --list --zookeeper localhost:2181
test
[root@localhost ~]#
4.发送消息
把消息发送给 broker 中的某个 topic,打开一个 Kafka 发送消息的客户端,然后开始用客户端向 Kafka 服务器发送消息
[root@localhost ~]# /usr/local/kafka/kafka_2.11-2.4.0/bin/kafka-console-producer.sh --broker-list 192.168.137.200:9092 --topic test
>123
>abc
>java
5.消费消息
打开一个消费消息的客户端,向 Kafka 服务器的某个主题消费消息
- 方式一:从当前主题中的最后一条消息的 offset(偏移量位置) +1开始消费
[root@localhost ~]# /usr/local/kafka/kafka_2.11-2.4.0/bin/kafka-console-consumer.sh --bootstrap-server 192.168.137.200:9092 --topic test
java
qf
hz
- 方式二:从当前主题中的第一条消息开始消费
[root@localhost ~]# /usr/local/kafka/kafka_2.11-2.4.0/bin/kafka-console-consumer.sh --bootstrap-server 192.168.137.200:9092 --from-beginning --topic test
123
abc
java
qf
hz
6.关于消息的细节
- 生产者将消息发送给 broker,broker 会将消息保存在本地的日志文件中
/usr/local/kafka/data/kafka-logs/主题-分区/00000000000000000000.log
- 消息的保存是有序的,通过 offset 偏移量来描述消息的有序性
- 消费者消费消息时也是通过 offset 来描述当前要消费的那条消息的位置
7.单播消息
在一个 Kafka 的 topic 中,启动两个消费者,一个生产者,问:生产者发送消息,这条消息是否同时会被两个消费者消费?
如果多个消费者在同一个消费组,那么只有一个消费者可以收到订阅的 topic 中的消息。
换言之,同一个消费组中只能有一个消费者收到一个 topic 中的消息。
[root@localhost ~]# /usr/local/kafka/kafka_2.11-2.4.0/bin/kafka-console-consumer.sh --bootstrap-server 192.168.137.200:9092 --consumer-property group.id=testGroup --topic test
a
b
8.多播消息
不同的消费组订阅同一个 topic,那么不同的消费组中只有一个消费者能收到消息。
实际上也是多个消费组中的多个消费者收到了同一个消息。
[root@localhost ~]# /usr/local/kafka/kafka_2.11-2.4.0/bin/kafka-console-consumer.sh --bootstrap-server 192.168.137.200:9092 --consumer-property group.id=testGroup --topic test
d
[root@localhost ~]# /usr/local/kafka/kafka_2.11-2.4.0/bin/kafka-console-consumer.sh --bootstrap-server 192.168.137.200:9092 --consumer-property group.id=testGroup1 --topic test
d
9.查看消费组的详细信息
通过以下命令可以查看到消费组的详细信息:
[root@localhost __consumer_offsets-0]# /usr/local/kafka/kafka_2.11-2.4.0/bin/kafka-consumer-groups.sh --bootstrap-server 192.168.137.200:9092 --describe --group testGroup
GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID
testGroup test 0 7 7 0 consumer-testGroup-1-e02ae50d-c6ee-45b2-986e-259dfb5c3a9a /192.168.137.200 consumer-testGroup-1
[root@localhost __consumer_offsets-0]#
重点关注以下几个信息:
- CURRENT-OFFSET:最后被消费的消息的偏移量
- LOG-END-OFFSET:消息总量(最后一条消息的偏移量)
- LAG:积压了多少条消息