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.关于消息的细节

关于消息的细节.png
  • 生产者将消息发送给 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:积压了多少条消息