“Kafka的基本知识”的版本间的差异
跳到导航
跳到搜索
Jihongchang(讨论 | 贡献) |
Jihongchang(讨论 | 贡献) |
||
(未显示同一用户的3个中间版本) | |||
第1行: | 第1行: | ||
− | === 1. Kafka 的安装 === | + | === 1.Kafka 的安装=== |
− | |||
*部署一台 ZooKeeper 服务器 | *部署一台 ZooKeeper 服务器 | ||
*安装 JDK | *安装 JDK | ||
第31行: | 第30行: | ||
</syntaxhighlight>[[启动 Kafka|详细]] | </syntaxhighlight>[[启动 Kafka|详细]] | ||
− | * 校验 Kafka 是否启动成功: | + | *校验 Kafka 是否启动成功: |
进入到 ZooKeeper 内查看是否有 Kafka 的节点:/brokers/ids/0 | 进入到 ZooKeeper 内查看是否有 Kafka 的节点:/brokers/ids/0 | ||
第38行: | 第37行: | ||
− | === 2. Kafka 中的一些基本概念 === | + | ===2. Kafka 中的一些基本概念=== |
Kafka 中有这么些复杂的概念 | Kafka 中有这么些复杂的概念 | ||
[[文件:Kafka 中的一些基本概念.png|无|缩略图|1200x1200px|替代=]] | [[文件:Kafka 中的一些基本概念.png|无|缩略图|1200x1200px|替代=]] | ||
第59行: | 第58行: | ||
− | === 3.创建 topic === | + | ===3.创建 topic=== |
− | * 通过 Kafka 命令向 ZK 中创建一个主题 | + | *通过 Kafka 命令向 ZK 中创建一个主题 |
<syntaxhighlight lang="shell-session"> | <syntaxhighlight lang="shell-session"> | ||
[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 | [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 | ||
第68行: | 第67行: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | * 查看当前 ZK 中所有的主题 | + | *查看当前 ZK 中所有的主题 |
<syntaxhighlight lang="shell-session"> | <syntaxhighlight lang="shell-session"> | ||
[root@localhost ~]# /usr/local/kafka/kafka_2.11-2.4.0/bin/kafka-topics.sh --list --zookeeper localhost:2181 | [root@localhost ~]# /usr/local/kafka/kafka_2.11-2.4.0/bin/kafka-topics.sh --list --zookeeper localhost:2181 | ||
第76行: | 第75行: | ||
− | === 4.发送消息 === | + | ===4.发送消息=== |
把消息发送给 broker 中的某个 topic,打开一个 Kafka 发送消息的客户端,然后开始用客户端向 Kafka 服务器发送消息<syntaxhighlight lang="shell-session"> | 把消息发送给 broker 中的某个 topic,打开一个 Kafka 发送消息的客户端,然后开始用客户端向 Kafka 服务器发送消息<syntaxhighlight lang="shell-session"> | ||
[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 | [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 | ||
第98行: | 第97行: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | * 方式二:从当前主题中的第一条消息开始消费 | + | *方式二:从当前主题中的第一条消息开始消费 |
<syntaxhighlight lang="shell-session"> | <syntaxhighlight lang="shell-session"> | ||
[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 | [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 | ||
第111行: | 第110行: | ||
===6.关于消息的细节=== | ===6.关于消息的细节=== | ||
[[文件:关于消息的细节.png|无|缩略图|1300x1300像素]] | [[文件:关于消息的细节.png|无|缩略图|1300x1300像素]] | ||
+ | |||
+ | *生产者将消息发送给 broker,broker 会将消息保存在本地的日志文件中 | ||
+ | <syntaxhighlight lang="shell-session"> | ||
+ | /usr/local/kafka/data/kafka-logs/主题-分区/00000000000000000000.log | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | *消息的保存是有序的,通过 offset 偏移量来描述消息的有序性 | ||
+ | *消费者消费消息时也是通过 offset 来描述当前要消费的那条消息的位置 | ||
+ | |||
+ | |||
+ | ===7.单播消息=== | ||
+ | 在一个 Kafka 的 topic 中,启动两个消费者,一个生产者,问:生产者发送消息,这条消息是否同时会被两个消费者消费? | ||
+ | |||
+ | 如果多个消费者在同一个消费组,那么只有一个消费者可以收到订阅的 topic 中的消息。 | ||
+ | |||
+ | 换言之,同一个消费组中只能有一个消费者收到一个 topic 中的消息。<syntaxhighlight lang="shell-session"> | ||
+ | [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 | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | === 8.多播消息 === | ||
+ | 不同的消费组订阅同一个 topic,那么不同的消费组中只有一个消费者能收到消息。 | ||
+ | |||
+ | 实际上也是多个消费组中的多个消费者收到了同一个消息。<syntaxhighlight lang="shell-session"> | ||
+ | [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 | ||
+ | |||
+ | </syntaxhighlight><syntaxhighlight lang="shell-session"> | ||
+ | [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 | ||
+ | </syntaxhighlight> | ||
+ | [[文件:单播和多播消息.png|居中|缩略图|1200x1200像素|单播和多播消息]] | ||
+ | |||
+ | |||
+ | === 9.查看消费组的详细信息 === | ||
+ | 通过以下命令可以查看到消费组的详细信息:<syntaxhighlight lang="shell-session"> | ||
+ | [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]# | ||
+ | </syntaxhighlight>重点关注以下几个信息: | ||
+ | |||
+ | * CURRENT-OFFSET:最后被消费的消息的偏移量 | ||
+ | * LOG-END-OFFSET:消息总量(最后一条消息的偏移量) | ||
+ | * LAG:积压了多少条消息 |
2022年8月22日 (一) 11:16的最新版本
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:积压了多少条消息