Docker部署Kafka

环境:

  • RockyLinux9.4

  • 虚拟机配置 4C12G(运存至少4G)

  • Docker version 26.1.3

  • 防火墙关闭

安装

拉取镜像

sudo docker pull bitnami/kafka:3.7

创建挂载文件目录

sudo mkdir /home/xxx/docker/kafka

目录路径就不那么讲究了...

请替换xxxxxx代表用户名

部署

Kafka 与 Zookeeper

Apache Kafka Raft (KRaft) 利用 Kafka 中的新仲裁控制器服务,该服务取代了以前的控制器,并利用了 Raft 共识协议的基于事件的变体。 这大大简化了 Kafka 的架构,将元数据的责任整合到 Kafka 本身,而不是将其拆分为两个不同的系统:ZooKeeper 和 Kafka。

更多信息可以在这里找到: https://developer.confluent.io/learn/kraft/

注意:根据 KIP-833,KRaft 现在处于生产就绪状态。

通用

docker run -d --name my-kafka --hostname kafka-master \
    -p 9094:9094 \
    -v /home/yd/docker/kafka:/bitnami/kafka \
    -e KAFKA_CFG_NODE_ID=0 \
    -e KAFKA_CFG_PROCESS_ROLES=controller,broker \
    -e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://:9094 \
    -e KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://:9092,EXTERNAL://192.168.33.3:9094 \
    -e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT \
    -e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka-master:9093 \
    -e KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER \
    bitnami/kafka:3.7

-e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://:9094 对内9092端口,对外9094端口

配置项列表

可自定义的环境变量

名字

描述

默认值

KAFKA_MOUNTED_CONF_DIR

Kafka 目录,用于挂载配置文件。

${KAFKA_VOLUME_DIR}/config

KAFKA_INTER_BROKER_USER

Kafka 代理间通信用户。

user

KAFKA_INTER_BROKER_PASSWORD

Kafka 代理间通信密码。

bitnami

KAFKA_CONTROLLER_USER

Kafka 控制平面通信用户。

controller_user

KAFKA_CONTROLLER_PASSWORD

Kafka 控制平面通信密码。

bitnami

KAFKA_CERTIFICATE_PASSWORD

证书的密码。

nil

KAFKA_TLS_TRUSTSTORE_FILE

Kafka 信任库文件位置。

nil

KAFKA_TLS_TYPE

选择要使用的 TLS 证书格式。

JKS

KAFKA_TLS_CLIENT_AUTH

将 kafka 代理配置为请求客户端身份验证。

required

KAFKA_OPTS

Kafka 部署选项。

nil

KAFKA_CFG_SASL_ENABLED_MECHANISMS

Kafka 配置覆盖。sasl.enabled.mechanisms

PLAIN,SCRAM-SHA-256,SCRAM-SHA-512

KAFKA_KRAFT_CLUSTER_ID

使用 Kafka Raft 模式 (KRaft) 时的 Kafka 集群 ID。

nil

KAFKA_SKIP_KRAFT_STORAGE_INIT

如果设置为 true,则在配置 process.roles 时跳过 Kraft 存储初始化。

false

KAFKA_CLIENT_LISTENER_NAME

客户端要使用的侦听器的名称(如果已设置),则相应地配置生产者/使用者。

nil

KAFKA_ZOOKEEPER_PROTOCOL

Zookeeper 连接的身份验证协议。允许的协议:、 和 。PLAINTEXTSASL, SSLSASL_SSL

PLAINTEXT

KAFKA_ZOOKEEPER_PASSWORD

用于 SASL 身份验证的 Kafka Zookeeper 用户密码。

nil

KAFKA_ZOOKEEPER_USER

用于 SASL 身份验证的 Kafka Zookeeper 用户。

nil

KAFKA_ZOOKEEPER_TLS_KEYSTORE_PASSWORD

Kafka Zookeeper 密钥库文件密码和密钥密码。

nil

KAFKA_ZOOKEEPER_TLS_TRUSTSTORE_PASSWORD

Kafka Zookeeper 信任库文件密码。

nil

KAFKA_ZOOKEEPER_TLS_TRUSTSTORE_FILE

Kafka Zookeeper 信任库文件位置。

nil

KAFKA_ZOOKEEPER_TLS_VERIFY_HOSTNAME

验证 TLS 证书上的 Zookeeper 主机名。

true

KAFKA_ZOOKEEPER_TLS_TYPE

选择要使用的 TLS 证书格式。允许的值:、。JKSPEM

JKS

KAFKA_CLIENT_USERS

用于客户端通信时,将在 Zookeeper 中创建其他用户列表。用逗号、分号或空格分隔。KAFKA_CLIENT_USERSASL_SCRAM

user

KAFKA_CLIENT_PASSWORDS

中指定的用户的密码。用逗号、分号或空格分隔。KAFKA_CLIENT_USERS

bitnami

KAFKA_HEAP_OPTS

Java 的 Kafka 堆选项。

-Xmx1024m -Xms1024m

只读环境变量

名字

描述

价值

KAFKA_BASE_DIR

Kafka 安装目录。

${BITNAMI_ROOT_DIR}/kafka

KAFKA_VOLUME_DIR

Kafka 持久性目录。

/bitnami/kafka

KAFKA_DATA_DIR

存储数据的 Kafka 目录。

${KAFKA_VOLUME_DIR}/data

KAFKA_CONF_DIR

Kafka 配置目录。

${KAFKA_BASE_DIR}/config

KAFKA_CONF_FILE

Kafka 配置文件。

${KAFKA_CONF_DIR}/server.properties

KAFKA_CERTS_DIR

证书文件的 Kafka 目录。

${KAFKA_CONF_DIR}/certs

KAFKA_INITSCRIPTS_DIR

初始化脚本的 Kafka 目录。

/docker-entrypoint-initdb.d

KAFKA_LOG_DIR

存储 Kafka 日志的目录。

${KAFKA_BASE_DIR}/logs

KAFKA_HOME

Kafka 主目录。

$KAFKA_BASE_DIR

KAFKA_DAEMON_USER

Kafka 系统用户。

kafka

KAFKA_DAEMON_GROUP

Kafka 系统组。

kafka

更多详情

参考 bitnami/kafka概述 即可

监控 Kafka 集群的 Web UI --- Kafdrop

该工具显示代理、主题、分区、消费者(包括滞后)等信息,并允许您查看消息。

部署

拉取镜像

sudo docker pull obsidiandynamics/kafdrop:4.0.2-SNAPSHOT

通用

docker run -d --rm -p 9000:9000 \
    -e KAFKA_BROKERCONNECT=<kafka部署IP>:9092 \
    -e JVM_OPTS="-Xms32M -Xmx64M" \
    -e SERVER_SERVLET_CONTEXTPATH="/" \
    --name my-kafdrop obsidiandynamics/kafdrop:4.0.2-SNAPSHOT