Topic和Events

创建主题Topic

主题(Topic)类似于文件系统中的文件夹,它用来存储事件(Events)。

事件(Events)也称为纪录或消息,比如支付交易、手机地理位置更新、运输订单、物联网设备或医疗设备的传感器测量数据等等都是事件(Events);事件(Events)被组织和存储在主题(Topic)中。

简单来说,主题(Topic)类似于文件系统中的文件夹,事件(Events)是该文件夹中的文件。

创建主题使用:kafka-topics.sh 脚本

  1. 不带任何参数会告知该脚本如何使用:./kafka-topics.sh

image-20240615143801381

  1. 创建主题:./kafka-topics.sh --create --topic <主题名> --bootstrap-server localhost:9092

image-20240615144213581

  1. 列出所有的主题:./kafka-topics.sh --list --bootstrap-server localhost:9092

image-20240615144336256

  1. 删除主题:./kafka-topics.sh --delete --topic <主题名> --bootstrap-server localhost:9092

image-20240615144514007

  1. 显示主题详细信息:./kafka-topics.sh --describe --topic <主题名> --bootstrap-server localhost:9092

image-20240615144747131

  1. 修改主题信息:./kafka-topics.sh --alter --topic <主题名> --partitions 5 --bootstrap-server localhost:9092

image-20240615144855387

在主题(Topic)中写入一些事件(Events)

Kafka客户端通过网络与Kafka Brokers进行通信,可以写(或读)主题Topic中的事件Events。

image-20240615144958891

Kafka Brokers一旦收到事件Event,就会将事件Event以持久和容错的方式存储起来,可以永久地存储。
通过 kafka-console-producer.sh 脚本工具写入事件Events

  1. 不带任何参数会告知该脚本如何使用:./kafka-console-producer.sh

image-20240615145416670

  1. ./kafka-console-producer.sh --topic <主题名> --bootstrap-server localhost:9092

  2. 每一次换行是一个事件Event

  3. 使用Ctrl+C退出,停止发送事件Event到主题Topic

image-20240615145640477

从主题(Topic)中读取事件(Events)

使用kafka-console-consumer.sh消费者客户端读取之前写入的事件Event:

  1. 不带任何参数会告知该脚本如何使用:./kafka-console-consumer.sh
  2. ./kafka-console-consumer.sh --topic <主题名> --from-beginning --bootstrap-server localhost:9092
  3. –from-beginning 表示从kafka最早的消息开始消费
  4. 使用Ctrl+C停止消费者客户端

image-20240615150214920

事件Events是持久存储在Kafka中的,所以它们可以被任意多次读取

外部环境连接Kafka

  1. 启动Kafka容器:docker run -p 9092:9092 apache/kafka:3.7.0
  2. 安装外部连接工具:IDEA Kafka插件
  3. 外部连接工具连接Kafka

image-20240615151245857

文档

Docker容器的Kafka有三种配置启动方式:

  1. 默认配置:使用Kafka容器的默认配置,外部是连不上的
  2. 文件输入:提供一个本地kafka属性配置文件,替换docker容器中的默认配置文件
  3. 环境变量:通过env变量定义Kafka属性,覆盖默认配置中定义对应该属性的值

文件输入

提供一个本地kafka属性配置文件,替换docker容器中的默认配置文件

1
2
3
4
5
6
7
8
9
10
11
12
docker run -p 9092:9092 apache/kafka:3.7.0
docker ps #查看容器id
docker exec -it <容器id> /bin/bash
# 把docker容器中的文件复制到linux中:
docker cp <容器id>:/etc/kafka/docker/server.properties ./
===================================# 修改server.properties文件#=================================
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://<你的虚拟机ip>:9092
# advertise的含义表示宣称的、公布的,Kafka服务对外开放的IP和端口
===============================================================================================
# 文件映射:
docker run --volume ./:/mnt/shared/config -p 9092:9092 apache/kafka:3.7.0

Kafka图形界面连接工具:

  1. Offset Explorer (以前叫 Kafka Tool),官网:https://www.kafkatool.com/
  2. CMAK(以前叫 Kafka Manager) 官网:https://github.com/yahoo/CMAK
  3. EFAK(以前叫 kafka-eagle) 官网:https://www.kafka-eagle.org/

Offset Explorer

image-20240615153848887

CMAK&EFAK

不建议使用