kafka笔记

1.kafka下载和安装

2.启动运行

2.1.通过zookeeper启动

  • 通过zookeeper 启动 kafka
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 先启动zookeeper 先进入目录下得bin目录
$ ./zookeeper-server-start.sh ../config/zookeeper.properties &

# 关闭zookeeper
$ ./zookeeper-server-stop.sh ../config/zookeeper.properties

# 启动kafka
$ ./kafka-server-start.sh ../config/server.properties &

# 关闭kafka
$ ./kafka-server-stop.sh ../config/server.properties

# 可以使用命令查看端口是否开启
$ netstat -nlpt

image-20240714114024240

总共占四个端口号 2181/34360, 9092/33942。

2.2.使用KRaft启动启动kafka

1
2
3
4
5
6
7
8
9
10
11
# 生成Cluster UUID(集群UUID): 
$ ./kafka-storage.sh random-uuid

# 格式化日志目录:
$ ./kafka-storage.sh format -t PT77p0DWQyisKu_kpt7g-Q -c ../config/kraft/server.properties

# 启动Kafka
$ ./kafka-server-start.sh ../config/kraft/server.properties &

# 关闭Kafka
$ ./kafka-server-stop.sh ../config/kraft/server.properties

image-20240714125458463

2.3.docker 启动

1
2
3
4
5
6
7
8
9
10
11
# 拉取Kafka镜像:
$ docker pull apache/kafka:3.7.1

# 启动Kafka容器:
$ docker run -p 9092:9092 apache/kafka:3.7.1

# 查看已安装的镜像:
$ docker images

# 删除镜像:
$ docker rmi apache/kafka:3.7.1

3.kafka操作

1.创建主题Topic

  • 使用Kafka之前,第一件事情是必须创建一个主题(Topic)

    • 主题(Topic)类似于文件系统中的文件夹;

    • 主题(Topic)用于存储事件(Events)

      • 事件(Events)也称为记录或消息,比如支付交易、手机地理位置更新、运输订单、物联网设备或医疗设备的传感器测量数据等等都是事件(Events);

      • 事件(Events)被组织和存储在主题(Topic)中

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

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

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

2、创建主题:./kafka-topics.sh –create –topic quickstart-events –bootstrap-server localhost:9092

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

4、删除主题:./kafka-topics.sh –delete –topic quickstart-events –bootstrap-server localhost:9092

5、显示主题详细信息:./kafka-topics.sh –describe –topic quickstart-events –bootstrap-server localhost:9092

6、修改主题信息:./kafka-topics.sh –alter –topic quickstart-events –partitions 5 –bootstrap-server localhost:9092

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

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

  • image-20240714140122273

    Kafka Brokers一旦收到事件Event,就会将事件Event以持久和容错的方式存储起来,可以永久地存储;

  • 通过 kafka-console-producer.sh 脚本工具写入事件Events;

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

    • ./kafka-console-producer.sh –topic quickstart-events –bootstrap-server localhost:9092

    • 每一次换行是一个事件Event;

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

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

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

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

    • ./kafka-console-consumer.sh –topic quickstart-events –from-beginning –bootstrap-server localhost:9092

    • –from-beginning 表示从kafka最早的消息开始消费

    • 使用Ctrl+C停止消费者客户端;

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

4.外部环境连接docker-kafka

  • 外部环境无法连接Kafka?

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

    • docker ps

    • docker run -p 9092:9092 apache/kafka:3.7.0

    • docker exec -it 容器id /bin/bash

    • 把docker容器中的文件复制到linux中:

    • docker cp bf17abcf35f0:/etc/kafka/docker/server.properties /opt/kafka/docker

  • 配置文件:server.properties

    • listeners=PLAINTEXT://0.0.0.0:9092

    • advertised.listeners=PLAINTEXT://192.168.11.128:9092

    • advertise的含义表示宣称的、公布的,Kafka服务对外开放的IP和端口;

  • 文件映射:docker run –volume /opt/kafka/docker:/mnt/shared/config -p 9092:9092 apache/kafka:3.7.2

  • Kafka图形界面连接工具:

​ Offset Explorer (以前叫 Kafka Tool),官网:https://www.kafkatool.com/

​ CMAK(以前叫 Kafka Manager) 官网:https://github.com/yahoo/CMAK

​ EFAK(以前叫 kafka-eagle) 官网:https://www.kafka-eagle.org/