【Docker】Kafka 容器部署

Kafka docker 容器化部署

Kafka標(biāo)準(zhǔn)軟件基于Bitnami Kafka 構(gòu)建。當(dāng)前版本為3.6.1

你可以通過輕云UC部署工具直接安裝部署,也可以手動按如下文檔操作,該項(xiàng)目已經(jīng)全面開源,可以從如下環(huán)境獲取
配置文件地址: https://gitee.com/qingplus/qingcloud-platform

qinghub自動安裝部署配置庫

簡介

Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng)(消息引擎系統(tǒng))甚侣,它是最初由Linkedin公司開發(fā),是一個分布式间学、支持分區(qū)的(partition)殷费、多副本的(replica)印荔,它的最大的特性就是可以實(shí)時的處理大量數(shù)據(jù)以滿足各種需求場景:比如基于hadoop的批處理系統(tǒng)、低延遲的實(shí)時系統(tǒng)详羡、Storm/Spark流式處理引擎仍律,web/nginx日志、訪問日志实柠,消息服務(wù)等等染苛,用scala語言編寫,Linkedin于2010年貢獻(xiàn)給了Apache基金會并成為頂級開源項(xiàng)目主到。

配置

可以使用以下環(huán)境變量通過 Apache Kafka Docker 設(shè)置配置:

  • KAFKA_CERTIFICATE_PASSWORD:證書的密碼茶行。沒有默認(rèn)值。
  • KAFKA_HEAP_OPTS:Apache Kafka 的 Java 堆大小登钥。默認(rèn)值:-Xmx1024m -Xms1024m畔师。
  • KAFKA_ZOOKEEPER_PROTOCOL:Zookeeper 連接的身份驗(yàn)證協(xié)議。允許的協(xié)議:PLAINTEXT牧牢、SASL看锉、SSL和SASL_SSL。默認(rèn)值:純文本塔鳍。
  • KAFKA_ZOOKEEPER_USER:用于 SASL 身份驗(yàn)證的 Apache Kafka Zookeeper 用戶伯铣。沒有默認(rèn)值。
  • KAFKA_ZOOKEEPER_PASSWORD:用于 SASL 身份驗(yàn)證的 Apache Kafka Zookeeper 用戶密碼轮纫。沒有默認(rèn)值腔寡。
  • KAFKA_ZOOKEEPER_TLS_KEYSTORE_PASSWORD:Apache Kafka Zookeeper密鑰庫文件密碼和密鑰密碼。沒有默認(rèn)值掌唾。
  • KAFKA_ZOOKEEPER_TLS_TRUSTSTORE_PASSWORD:Apache Kafka Zookeeper 信任庫文件密碼放前。沒有默認(rèn)值。
  • KAFKA_ZOOKEEPER_TLS_VERIFY_HOSTNAME:驗(yàn)證 TLS 證書上的 Zookeeper 主機(jī)名糯彬。默認(rèn)值:true凭语。
  • KAFKA_ZOOKEEPER_TLS_TYPE:選擇要使用的 TLS 證書格式。允許值:JKS, PEM. 默認(rèn)值:JKS撩扒。
  • KAFKA_CFG_LISTENERS:Kafkalisteners配置覆蓋似扔。沒有默認(rèn)值。
  • KAFKA_CFG_ADVERTISED_LISTENERS:Kafkaadvertised.listeners配置覆蓋搓谆。沒有默認(rèn)值炒辉。
  • KAFKA_CFG_SASL_ENABLED_MECHANISMS:將 SASL 用于客戶端、代理間或 Zookeeper 通信時允許的機(jī)制挽拔。允許的值:PLAIN辆脸、SCRAM-SHA-256或SCRAM-SHA-512這些值的逗號分隔組合但校。默認(rèn)值:PLAIN螃诅、SCRAM-SHA-256、SCRAM-SHA-512。注意:KRaft <= 3.4 尚不支持 SCRAM 機(jī)制术裸,因此此列表將自動縮減為僅PLAINSASL 機(jī)制倘是。
  • KAFKA_TLS_CLIENT_AUTH:設(shè)置 的值ssl.client.auth。允許值:required, requested, none. 默認(rèn)值:必填袭艺。
  • KAFKA_TLS_<uppercase_listener_name>_CLIENT_AUTHlistener.name.<listener>.ssl.client.auth:設(shè)置用于通過 SASL 配置 mTLS的值搀崭。允許值:required, requested, none.
  • KAFKA_TLS_TYPE:選擇要使用的 TLS 證書格式。允許值:JKS, PEM. 默認(rèn)值:JKS猾编。
  • KAFKA_CLIENT_USERS:使用 SASL 進(jìn)行客戶端通信時將在 Zookeeper 中創(chuàng)建的用戶瘤睹。被逗號隔開。默認(rèn):用戶
  • KAFKA_CLIENT_PASSWORDS:在 處指定的用戶的密碼KAFKA_CLIENT_USERS答倡。被逗號隔開轰传。默認(rèn)值:bitnami
  • KAFKA_CFG_MAX_PARTITION_FETCH_BYTES:服務(wù)器將返回的每個分區(qū)的最大數(shù)據(jù)量。沒有默認(rèn)值瘪撇。
  • KAFKA_CFG_MAX_REQUEST_SIZE:請求的最大大谢癫纭(以字節(jié)為單位)。沒有默認(rèn)值倔既。
  • KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL:用于代理間通信的 SASL 機(jī)制恕曲。沒有默認(rèn)值。注意:KRaft <= 3.4 尚不支持 SCRAM 機(jī)制渤涌,因此 KRaft 模式下唯一支持的 SASL 機(jī)制是PLAIN.
  • KAFKA_INTER_BROKER_USER:Apache Kafka 代理間通信用戶佩谣。默認(rèn)值:用戶。
  • KAFKA_INTER_BROKER_PASSWORD:Apache Kafka 代理間通信密碼实蓬。默認(rèn)值:bitnami稿存。
  • KAFKA_CFG_SASL_MECHANISM_CONTROLLER_PROTOCOL:用于控制器通信的 SASL 機(jī)制。沒有默認(rèn)值瞳秽。注意:KRaft <= 3.4 尚不支持 SCRAM 機(jī)制瓣履,因此 KRaft 模式下唯一支持的 SASL 機(jī)制是PLAIN.
  • KAFKA_CONTROLLER_USER:Apache Kafka 控制器通信用戶。默認(rèn)值:controller_user练俐。
  • KAFKA_CONTROLLER_PASSWORD:Apache Kafka控制器通信密碼袖迎。默認(rèn)值:bitnami。
  • KAFKA_CFG_PROCESS_ROLES:KRaft 模式下運(yùn)行時的節(jié)點(diǎn)角色腺晾。沒有默認(rèn)值燕锥。
  • KAFKA_CFG_NODE_ID:唯一的節(jié)點(diǎn)id,在KRaft模式下運(yùn)行時需要悯蝉。沒有默認(rèn)值归形。
  • KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP:使用 Apache Kafka 安全協(xié)議映射每個偵聽器。如果節(jié)點(diǎn)設(shè)置了controller角色鼻由,則需要此設(shè)置才能為CONTROLLER LISTENER. 例如:PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT暇榴。沒有默認(rèn)值厚棵。
  • KAFKA_CFG_CONTROLLER_QUORUM_VOTERS:以逗號分隔的 {id}@{host}:{port} 條目列表中的控制器仲裁投票者集的 id/端點(diǎn)信息映射。沒有默認(rèn)值蔼紧。
  • KAFKA_CFG_CONTROLLER_LISTENER_NAMES:控制器使用的偵聽器名稱的逗號分隔列表婆硬。如果在 KRaft 模式下運(yùn)行,這是必需的奸例。沒有默認(rèn)值彬犯。
  • KAFKA_KRAFT_CLUSTER_ID:使用Kafka Raft(KRaft)時的Kafka集群ID。沒有默認(rèn)值查吊。
    此外谐区,任何以KAFKA_CFG_開頭的環(huán)境變量都將映射到其相應(yīng)的 Apache Kafka 鍵。例如逻卖,使用KAFKA_CFG_BACKGROUND_THREADS設(shè)置background.threads或KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE配置auto.create.topics.enable卢佣。
docker run --name kafka 
        -e KAFKA_CFG_PROCESS_ROLES ... 
        -e KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true 
        registry.cn-hangzhou.aliyuncs.com/qingcloudtech/kafka:latest

或者通過修改docker-compose.yml:

kafka:
  ...
  environment:
    - KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE=true
  ...

Apache Kafka 開發(fā)設(shè)置示例

要在開發(fā)設(shè)置中使用 Apache Kafka,請創(chuàng)建以下docker-compose.yml文件:

version: "3"
services:
  kafka:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/kafka:latest'
    ports:
      - '9092:9092'
    environment:
      - KAFKA_CFG_NODE_ID=0
      - KAFKA_CFG_PROCESS_ROLES=controller,broker
      - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER

要部署它箭阶,請在文件所在目錄中運(yùn)行以下命令docker-compose.yml:

docker-compose up -d

kafka 與zookeeper配置

Apache Kafka Raft (KRaft) 在 Kafka 中使用了新的仲裁控制器服務(wù)虚茶,該服務(wù)取代了之前的控制器,并使用了 Raft 共識協(xié)議的基于事件的變體仇参。這極大地簡化了 Kafka 的架構(gòu)嘹叫,將元數(shù)據(jù)整合到 Kafka 本身,而不是將其拆分到兩個不同的系統(tǒng):ZooKeeper 和 Kafka诈乒。

如果您想繼續(xù)使用ZooKeeper罩扇,可以使用以下配置:

version: "3.9"

services:
  zookeeper:
    image: registry.cn-hangzhou.aliyuncs.com/qingcloudtech/zookeeper:3.9
    ports:
      - "2181:2181"
    volumes:
      - "zookeeper_data:/bitnami"
    environment:
      - ALLOW_ANONYMOUS_LOGIN=yes
  kafka:
    image: registry.cn-hangzhou.aliyuncs.com/qingcloudtech/kafka:3.6.1
    ports:
      - "9092:9092"
    volumes:
      - "kafka_data:/bitnami"
    environment:
      - KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
    depends_on:
      - zookeeper
volumes:
  zookeeper_data:
    driver: local
  kafka_data:
    driver: local

使用內(nèi)部和外部客戶端訪問 Apache Kafka

為了使用內(nèi)部和外部客戶端訪問 Apache Kafka 代理,您需要為每個客戶端配置一個偵聽器怕磨。

為此喂饥,請將以下環(huán)境變量添加到 docker-compose 中:

    environment:
      - KAFKA_CFG_NODE_ID=0
      - KAFKA_CFG_PROCESS_ROLES=controller,broker
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@<your_host>:9093
+     - KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://:9094
+     - KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,EXTERNAL://localhost:9094
+     - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,EXTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER

并暴露外部端口:

內(nèi)部客戶端仍然可以在docker網(wǎng)絡(luò)內(nèi)使用

    ports:
-     - '9092:9092'
+     - '9094:9094'

注意:要從外部進(jìn)行連接,請將localhost上面的內(nèi)容更改為主機(jī)的外網(wǎng)IP/主機(jī)名并包含EXTERNAL://0.0.0.0:9093在內(nèi)KAFKA_CFG_LISTENERS以允許遠(yuǎn)程連接肠鲫。

使用外部客戶端的生產(chǎn)者和消費(fèi)者

這些來自同一主機(jī)的客戶端將用于localhost連接到 Apache Kafka员帮。

kafka-console-producer.sh --producer.config /opt/bitnami/kafka/config/producer.properties --bootstrap-server 127.0.0.1:9094 --topic test
kafka-console-consumer.sh --consumer.config /opt/bitnami/kafka/config/consumer.properties --bootstrap-server 127.0.0.1:9094 --topic test --from-beginning

如果從另一臺計算機(jī)運(yùn)行這些命令,請相應(yīng)地更改地址导饲。

使用內(nèi)部客戶端的生產(chǎn)者和消費(fèi)者

這些來自同一 Docker 網(wǎng)絡(luò)上其他容器的客戶端將使用 kafka 容器服務(wù)主機(jī)名連接到 Apache Kafka捞高。

kafka-console-producer.sh --producer.config /opt/bitnami/kafka/config/producer.properties --bootstrap-server kafka:9092 --topic test
kafka-console-consumer.sh --consumer.config /opt/bitnami/kafka/config/consumer.properties --bootstrap-server kafka:9092 --topic test --from-beginning

同樣,應(yīng)用程序代碼需要使用bootstrap.servers=kafka:9092

安全

為了配置身份驗(yàn)證渣锦,您必須正確配置 Apache Kafka 偵聽器硝岗。讓我們看一個示例,為 Apache Kafka 配置SASL_SSL與客戶端通信的身份驗(yàn)證以及SASL與控制器相關(guān)的通信的身份驗(yàn)證袋毙。

定義以下環(huán)境變量型檀,以及用于客戶端通信的 SASL 憑據(jù):

KAFKA_CFG_LISTENERS=SASL_SSL://:9092,CONTROLLER://:9093
KAFKA_CFG_ADVERTISED_LISTENERS=SASL_SSL://localhost:9092
KAFKA_CLIENT_USERS=user
KAFKA_CLIENT_PASSWORDS=password
KAFKA_CLIENT_LISTENER_NAME=SASL_SSL
KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
KAFKA_CFG_SASL_MECHANISM_CONTROLLER_PROTOCOL=PLAIN
KAFKA_CONTROLLER_USER=controller_user
KAFKA_CONTROLLER_PASSWORD=controller_password

必須使用自己的 SSL 證書。您可以將 Java 密鑰存儲或 PEM 文件放入/opt/bitnami/kafka/config/certs. 如果 JKS 或 PEM 證書受密碼保護(hù)(推薦)听盖,您將需要提供它才能訪問密鑰庫:

KAFKA_CERTIFICATE_PASSWORD=myCertificatePassword

如果相關(guān)證書安裝在/opt/bitnami/kafka/config/certs/kafka.truststore.jks胀溺、/opt/bitnami/kafka/config/certs/kafka.truststore.pem裂七,/bitnami/kafka/config/certs/kafka.truststore.jks,/bitnami/kafka/config/certs/kafka.truststore.pem月幌,請設(shè)置該KAFKA_TLS_TRUSTSTORE_FILE變量碍讯。

以下腳本可以幫助您創(chuàng)建 JKS 和證書:

請記住以下注意事項(xiàng):
當(dāng)提示輸入密碼時悬蔽,請為所有節(jié)點(diǎn)使用相同的密碼扯躺。

  • 將 Common Name 或 FQDN 值設(shè)置Apache Kafka 容器主機(jī)名,例如kafka.example.com蝎困。輸入此值后录语,當(dāng)提示“您的名字和姓氏是什么?”時禾乘,也輸入此值澎埠。
  • 作為替代方案,您可以禁用主機(jī)名驗(yàn)證始藕,將環(huán)境變量設(shè)置KAFKA_CFG_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM為空字符串蒲稳。
  • 設(shè)置 Apache Kafka 集群時(請查看“設(shè)置 Apache Kafka 集群”以獲取更多信息),每個 Apache Kafka 代理和邏輯客戶端都需要自己的密鑰庫伍派。您必須對集群中的每個代理重復(fù)該過程江耀。
  • 以下 docker-compose 文件是一個示例,顯示如何掛載受密碼保護(hù)的 JKS 證書certificatePassword123诉植。此外祥国,它還指定 Apache Kafka 容器主機(jī)名以及客戶端和 Zookeeper 用戶的憑據(jù)。
version: '2'

services:
  kafka:
    image: 'registry.cn-hangzhou.aliyuncs.com/qingcloudtech/kafka:latest'
    hostname: kafka.example.com
    ports:
      - '9092'
    environment:
      - KAFKA_CFG_NODE_ID=0
      - KAFKA_CFG_PROCESS_ROLES=controller,broker
      - KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093
      - KAFKA_CFG_LISTENERS=SASL_SSL://:9092,CONTROLLER://:9093
      - KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
      - KAFKA_CFG_ADVERTISED_LISTENERS=SASL_SSL://:9092
      - KAFKA_CLIENT_USERS=user
      - KAFKA_CLIENT_PASSWORDS=password
      - KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
      - KAFKA_CFG_SASL_MECHANISM_CONTROLLER_PROTOCOL=PLAIN
      - KAFKA_CONTROLLER_USER=controller_user
      - KAFKA_CONTROLLER_PASSWORD=controller_password
      - KAFKA_CFG_INTER_BROKER_LISTENER_NAME=SASL_SSL
      - KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL=PLAIN
      - KAFKA_INTER_BROKER_USER=controller_user
      - KAFKA_INTER_BROKER_PASSWORD=controller_password
      - KAFKA_CERTIFICATE_PASSWORD=certificatePassword123
      - KAFKA_TLS_TYPE=JKS # or PEM
    volumes:
      # Both .jks and .pem files are supported
      # - './kafka.keystore.pem:/opt/bitnami/kafka/config/certs/kafka.keystore.pem:ro'
      # - './kafka.keystore.key:/opt/bitnami/kafka/config/certs/kafka.keystore.key:ro'
      # - './kafka.truststore.pem:/opt/bitnami/kafka/config/certs/kafka.truststore.pem:ro'
      - './kafka.keystore.jks:/opt/bitnami/kafka/config/certs/kafka.keystore.jks:ro'
      - './kafka.truststore.jks:/opt/bitnami/kafka/config/certs/kafka.truststore.jks:ro'

為了獲得使用和生成消息所需的憑據(jù)晾腔,您需要在客戶端中提供憑據(jù)舌稀。如果您的 Apache Kafka 客戶端允許,請使用您提供的憑據(jù)灼擂。

在使用bitnami/kafka image生成和使用消息時壁查,您需要指向consumer.properties和/或producer.properties文件,其中包含工作所需的配置剔应。您可以在該目錄中找到該文件/opt/bitnami/kafka/config潮罪。

生成消息:

kafka-console-producer.sh --bootstrap-server 127.0.0.1:9092 --topic test --producer.config /opt/bitnami/kafka/config/producer.properties

消費(fèi)消息:

kafka-console-consumer.sh --bootstrap-server 127.0.0.1:9092 --topic test --consumer.config /opt/bitnami/kafka/config/consumer.properties

使用其他工具來使用 Apache Kafka 集群,則需要提供所需的信息领斥。您可以在位于目錄的文件中找到所需的信息/opt/bitnami/kafka/config嫉到。

Inter-Broker 通信

當(dāng)部署具有多個代理的 Apache Kafka 集群時,可以使用以下變量SASL配置代理間通信:SASL_SSL

  • KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL:Apache Kafka 代理間通信協(xié)議月洛。
  • KAFKA_INTER_BROKER_USER:Apache Kafka 代理間通信用戶何恶。
  • KAFKA_INTER_BROKER_PASSWORD:Apache Kafka 代理間通信密碼。
    注意:在 KRaft 模式下運(yùn)行時嚼黔,KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL 僅支持PLAINKafka 版本 <= 3.4 中的機(jī)制细层。

Control plane通信

在 KRaft 模式下部署具有多個控制器的 Apache Kafka 集群時惜辑,可以使用以下變量SASL配置控制器通信:SASL_SSL

  • KAFKA_CFG_SASL_MECHANISM_CONTROLLER_PROTOCOL:Apache Kafka 控制器通信協(xié)議。
  • KAFKA_CONTROLLER_USER:Apache Kafka 控制器通信用戶疫赎。目前僅PLAIN支持機(jī)制盛撑。
  • KAFKA_CONTROLLER_PASSWORD:Apache Kafka控制器通信密碼。
    注意:在KRaft模式下運(yùn)行時捧搞,KAFKA_CFG_SASL_MECHANISM_CONTROLLER_PROTOCOL僅支持PLAIN機(jī)制抵卫。

Apache Kafka SASL 配置

配置 Apache Kafka 偵聽器SASL或SASL_SSL與客戶端通信時,您可以使用以下環(huán)境變量提供 SASL 憑據(jù):

  • KAFKA_CLIENT_USERS:Apache Kafka 客戶端用戶胎撇。默認(rèn):user
  • KAFKA_CLIENT_PASSWORDS:Apache Kafka 客戶端用戶密碼介粘。默認(rèn)值:bitnami
    注意:在 KRaft 模式下運(yùn)行時,只有第一個user:password對才會生效晚树,因?yàn)?KRaft 模式尚不支持 SCRAM 機(jī)制姻采。

Apache Kafka KRaft 模式配置

可以通過提供以下值來啟用 KRaft 模式:

  • KAFKA_CFG_PROCESS_ROLES:以逗號分隔的 Kafka KRaft 角色列表。允許值:‘controller,broker’, ‘controller’, ’broker‘.

  • KAFKA_CFG_NODE_ID:Kafka節(jié)點(diǎn)的唯一id爵憎。

  • KAFKA_CFG_LISTENERS:Kafka 監(jiān)聽器列表慨亲。如果節(jié)點(diǎn)設(shè)置了角色包含controller,則必須包含CONTROLLER監(jiān)聽器宝鼓。

  • KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP:使用 Apache Kafka 安全協(xié)議映射每個偵聽器刑棵。如果節(jié)點(diǎn)設(shè)置了controller角色,則需要此設(shè)置環(huán)境變量. 例如:PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT席函。

  • 為了在沒有身份驗(yàn)證的情況下配置控制器通信铐望,應(yīng)該提供以下環(huán)境變量:
    KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: 應(yīng)包括CONTROLLER:PLAINTEXT.

為了配置 Apache Kafka 控制器通信帶SASL,應(yīng)該提供以下環(huán)境變量:

  • KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: 應(yīng)包括CONTROLLER:SASL.
  • KAFKA_CFG_SASL_MECHANISM_CONTROLLER_PROTOCOL:用于控制器通信的 SASL 機(jī)制茂附。注意:KRaft 模式尚不支持 SCRAM 機(jī)制正蛙,因此 KRaft 模式中唯一支持的 SASL 機(jī)制是PLAIN.
  • KAFKA_CONTROLLER_USER:Apache Kafka 控制器通信用戶。
  • KAFKA_CONTROLLER_PASSWORD:Apache Kafka控制器通信密碼营曼。

為了配置 Apache Kafka 控制器通信帶SSL乒验,應(yīng)該提供以下環(huán)境變量:

  • KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: 應(yīng)包括CONTROLLER:SSL.

  • KAFKA_TLS_<uppercase_controller_listener_name>_CLIENT_AUTH:配置 kafka 控制平面通信的 mTLS 身份驗(yàn)證方法。允許值:required, requested, none.

  • KAFKA_TLS_TYPE:選擇要使用的 TLS 證書格式蒂阱。允許值:JKS, PEM. 默認(rèn)值:JKS锻全。
    有效的密鑰庫和信任庫安裝在/opt/bitnami/kafka/config/certs/kafka.keystore.jks和 處/opt/bitnami/kafka/config/certs/kafka.truststore.jks。

  • 為了使用 Zookeeper 服務(wù)器對 Apache Kafka 進(jìn)行身份驗(yàn)證SASL_SSL录煤,應(yīng)該提供以下環(huán)境變量:

  • KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: 應(yīng)包括CONTROLLER:SASL_SSL.

  • KAFKA_CFG_SASL_MECHANISM_CONTROLLER_PROTOCOL:用于控制器通信的 SASL 機(jī)制鳄厌。注意:KRaft 模式尚不支持 SCRAM 機(jī)制,因此 KRaft 模式中唯一支持的 SASL 機(jī)制是PLAIN.

  • KAFKA_CONTROLLER_USER:Apache Kafka 控制器通信用戶妈踊。

  • KAFKA_CONTROLLER_PASSWORD:Apache Kafka控制器通信密碼了嚎。

  • KAFKA_TLS_<uppercase_controller_listener_name>_CLIENT_AUTH:配置 kafka 控制平面通信的 mTLS 身份驗(yàn)證方法。允許值:required, requested, none.

  • KAFKA_TLS_TYPE:選擇要使用的 TLS 證書格式。允許值:JKS, PEM. 默認(rèn)值:JKS歪泳。
    有效的密鑰庫和信任庫安裝在/opt/bitnami/kafka/config/certs/kafka.keystore.jks和 處/opt/bitnami/kafka/config/certs/kafka.truststore.jks萝勤。
    SSL注意:SSL 設(shè)置由使用或協(xié)議配置的所有偵聽器共享SASL_SSL。尚不支持為每個偵聽器設(shè)置不同的證書呐伞。

Apache Kafka ZooKeeper 模式配置

可以通過提供以下值來啟用 Zookeeper 模式:

  • KAFKA_CFG_ZOOKEEPER_CONNECT:以逗號分隔的 Zookeeper 連接字符串列表敌卓。例如<zk_host1>:<zk_port1>,<zk_host2>:<zk_port2>
  • KAFKA_CFG_BROKER_ID:Kafka Broker 的可選ID。如果不設(shè)置伶氢,將自動生成一個隨機(jī)ID趟径。
    連接 Zookeeper 服務(wù)器有不同的配置選項(xiàng)。

為了無需身份驗(yàn)證即可連接 Zookeeper 服務(wù)器鞍历,您應(yīng)該提供以下環(huán)境變量:

  • KAFKA_ZOOKEEPER_PROTOCOL:純文本舵抹。

為了使用 Zookeeper 服務(wù)器對 Apache Kafka 進(jìn)行身份驗(yàn)證SASL肪虎,您應(yīng)該提供以下環(huán)境變量:

  • KAFKA_ZOOKEEPER_PROTOCOL:SASL劣砍。
  • KAFKA_ZOOKEEPER_USER:用于 SASL 身份驗(yàn)證的 Apache Kafka Zookeeper 用戶。沒有默認(rèn)值扇救。
  • KAFKA_ZOOKEEPER_PASSWORD:用于 SASL 身份驗(yàn)證的 Apache Kafka Zookeeper 用戶密碼刑枝。沒有默認(rèn)值。

為了使用 Zookeeper 服務(wù)器對 Apache Kafka 進(jìn)行身份驗(yàn)證SSL迅腔,您應(yīng)該提供以下環(huán)境變量:

  • KAFKA_ZOOKEEPER_PROTOCOL:SSL装畅。
  • KAFKA_ZOOKEEPER_TLS_KEYSTORE_PASSWORD:Apache Kafka Zookeeper密鑰庫文件密碼和密鑰密碼。沒有默認(rèn)值沧烈。
  • KAFKA_ZOOKEEPER_TLS_TRUSTSTORE_PASSWORD:Apache Kafka Zookeeper 信任庫文件密碼掠兄。沒有默認(rèn)值。
  • KAFKA_ZOOKEEPER_TLS_VERIFY_HOSTNAME:驗(yàn)證 TLS 證書上的 Zookeeper 主機(jī)名锌雀。默認(rèn)值:true蚂夕。
  • KAFKA_ZOOKEEPER_TLS_TYPE:選擇要使用的 TLS 證書格式。允許值:JKS, PEM. 默認(rèn)值:JKS腋逆。

為了使用 Zookeeper 服務(wù)器對 Apache Kafka 進(jìn)行身份驗(yàn)證SASL_SSL婿牍,您應(yīng)該提供以下環(huán)境變量:

  • KAFKA_ZOOKEEPER_PROTOCOL:SASL_SSL。
  • KAFKA_ZOOKEEPER_USER:用于 SASL 身份驗(yàn)證的 Apache Kafka Zookeeper 用戶惩歉。沒有默認(rèn)值等脂。
  • KAFKA_ZOOKEEPER_PASSWORD:用于 SASL 身份驗(yàn)證的 Apache Kafka Zookeeper 用戶密碼。沒有默認(rèn)值撑蚌。
  • KAFKA_ZOOKEEPER_TLS_TRUSTSTORE_FILE:Apache Kafka Zookeeper 信任庫文件位置上遥。如果安裝位置不同于/bitnami/kafka/conf/certs/zookeeper.truststore.pem、/bitnami/kafka/conf/certs/zookeeper.truststore.jks或無默認(rèn)值争涌,請設(shè)置/opt/bitnami/kafka/config/certs/zookeeper.truststore.jks它粉楚。/opt/bitnami/kafka/conf/certs/zookeeper.truststore.pem
  • KAFKA_ZOOKEEPER_TLS_KEYSTORE_PASSWORD:Apache Kafka Zookeeper密鑰庫文件密碼和密鑰密碼。沒有默認(rèn)值第煮。
  • KAFKA_ZOOKEEPER_TLS_TRUSTSTORE_PASSWORD:Apache Kafka Zookeeper 信任庫文件密碼解幼。沒有默認(rèn)值抑党。
  • KAFKA_ZOOKEEPER_TLS_VERIFY_HOSTNAME:驗(yàn)證 TLS 證書上的 Zookeeper 主機(jī)名。默認(rèn)值:true撵摆。
  • KAFKA_ZOOKEEPER_TLS_TYPE:選擇要使用的 TLS 證書格式底靠。允許值:JKS, PEM. 默認(rèn)值:JKS。
    注意:您還必須使用自己的 SSL 證書特铝。您可以將 Java 密鑰庫(zookeeper.keystore.jks和)或zookeeper.truststore.jksPEM 文件(zookeeper.keystore.pem和)安裝到zookeeper.keystore.key. 如果客戶端身份驗(yàn)證是在Zookeeper 中暑中,則證書文件是可選的。zookeeper.truststore.pem/opt/bitnami/kafka/conf/certsnonewant

設(shè)置 Apache Kafka 集群

可以使用以下環(huán)境變量通過設(shè)置 Apache Kafka 集群:

  • KAFKA_CFG_CONTROLLER_QUORUM_VOTERS:逗號分隔的host:port對鲫剿,每個對應(yīng)一個 Kafka 控制器連接鳄逾。

步驟 1:為 Apache Kafka 創(chuàng)建第一個節(jié)點(diǎn)

第一步是創(chuàng)建一個 Apache Kafka 實(shí)例。

docker run --name kafka-0 \
  --network app-tier \
  -e KAFKA_CFG_NODE_ID=0 \
  -e KAFKA_CFG_PROCESS_ROLES=controller,broker \
  -e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \
  -e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \
  -e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka-0:9093,1@kafka-1:9093,2@kafka-2:9093 \
  -e KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3 \
  -e KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=3 \
  -e KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=2 \
  -e KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv \
  -p :9092 \
  -p :9093 \
  registry.cn-hangzhou.aliyuncs.com/qingcloudtech/kafka:latest

步驟 2:創(chuàng)建第二個節(jié)點(diǎn)

接下來我們啟動一個新的 Apache Kafka 容器灵莲。

docker run --name kafka-1 \
  --network app-tier \
  -e KAFKA_CFG_NODE_ID=1 \
  -e KAFKA_CFG_PROCESS_ROLES=controller,broker \
  -e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \
  -e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \
  -e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka-0:9093,1@kafka-1:9093,2@kafka-2:9093 \
  -e KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3 \
  -e KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=3 \
  -e KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=2 \
  -e KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv \
  -p :9092 \
  -p :9093 \
  registry.cn-hangzhou.aliyuncs.com/qingcloudtech/kafka:latest

步驟3:創(chuàng)建第三個節(jié)點(diǎn)

接下來我們啟動另一個新的 Apache Kafka 容器雕凹。

docker run --name kafka-3 \
  --network app-tier \
  -e KAFKA_CFG_NODE_ID=3 \
  -e KAFKA_CFG_PROCESS_ROLES=controller,broker \
  -e KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093 \
  -e KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \
  -e KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka-0:9093,1@kafka-1:9093,2@kafka-2:9093 \
  -e KAFKA_CFG_OFFSETS_TOPIC_REPLICATION_FACTOR=3 \
  -e KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=3 \
  -e KAFKA_CFG_TRANSACTION_STATE_LOG_MIN_ISR=2 \
  -e KAFKA_KRAFT_CLUSTER_ID=abcdefghijklmnopqrstuv \
  -p :9092 \
  -p :9093 \
  registry.cn-hangzhou.aliyuncs.com/qingcloudtech/kafka:latest

一個 Apache Kafka 集群配置完成≌常可以通過添加/刪除從屬服務(wù)器來擴(kuò)展集群枚抵,而不會導(dǎo)致任何停機(jī)。

可以在文件中找到此部署的 docker-compose 版本docker-compose-cluster.yml明场。

示例:創(chuàng)建一個 replicated topic

可以使用以下命令創(chuàng)建:

root@kafka-0:/# /opt/bitnami/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --topic mytopic --partitions 3 --replication-factor 3
Created topic "mytopic".

root@kafka-0:/# /opt/bitnami/kafka/bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic mytopic
Topic:mytopic   PartitionCount:3        ReplicationFactor:3     Configs:
Topic: mytopic  Partition: 0    Leader: 2       Replicas: 2,3,1 Isr: 2,3,1
Topic: mytopic  Partition: 1    Leader: 3       Replicas: 3,1,2 Isr: 3,1,2
Topic: mytopic  Partition: 2    Leader: 1       Replicas: 1,2,3 Isr: 1,2,3

All配置

該鏡像中所有配置可以在/bitnami/kafka/config/中查找汽摹,可以通過設(shè)置 KAFKA_MOUNTED_CONF_DIR 環(huán)境變量來更改該位置。

docker run --name kafka -v /path/to/server.properties:/bitnami/kafka/config/server.properties registry.cn-hangzhou.aliyuncs.com/qingcloudtech/kafka:latest

之后苦锨,更改將被同步到容器中逼泣。

第 1 步:運(yùn)行 Apache Kafka 映像

運(yùn)行 Apache Kafka 映像,從主機(jī)安裝目錄舟舒。

修改docker-compose.yml文件:

...
services:
  kafka:
    ...
    volumes:
      - 'kafka_data:/bitnami'
+     - /path/to/server.properties:/bitnami/kafka/config/server.properties

第 2 步:編輯配置

使用您喜歡的編輯器編輯主機(jī)上的配置拉庶。

vi /path/to/server.properties

第3步:重啟Apache Kafka
更改配置后,重新啟動 Apache Kafka 容器以使更改生效魏蔗。

docker restart kafka

或者使用 Docker Compose:

docker-compose restart kafka

日志
容器日志發(fā)送到stdout. 要查看日志:

docker logs kafka

或者使用 Docker Compose:

docker-compose logs kafka

維護(hù)

備份您的容器

要備份數(shù)據(jù)砍的、配置和日志,請按照以下簡單步驟操作:

第 1 步:停止當(dāng)前正在運(yùn)行的容器

docker stop kafka

或者使用 Docker Compose:

docker-compose stop kafka

步驟2:運(yùn)行備份命令

我們需要在用于創(chuàng)建備份的容器中安裝兩個卷:主機(jī)上用于存儲備份的目錄莺治,以及我們剛剛停止的容器中的卷廓鞠,以便我們可以訪問數(shù)據(jù)。

docker run --rm -v /path/to/kafka-backups:/backups --volumes-from kafka busybox \
cp -a /bitnami/kafka /backups/latest

或者使用 Docker Compose:

docker run --rm -v /path/to/kafka-backups:/backups --volumes-from `docker-compose ps -q kafka` busybox \
cp -a /bitnami/kafka /backups/latest

恢復(fù)備份

恢復(fù)備份就像將備份作為卷安裝在容器中一樣簡單谣旁。

docker run -v /path/to/kafka-backups/latest:/bitnami/kafka registry.cn-hangzhou.aliyuncs.com/qingcloudtech/kafka:latest

修改docker-compose.yml文件:

kafka:
  volumes:
    - /path/to/kafka-backups/latest:/bitnami/kafka

從 Zookeeper 模式遷移到 KRaft 模式

本節(jié)介紹 Kafka 從 Zookeeper 模式到 KRaft 模式的遷移床佳。

1.從 Zookeeper 獲取cluster ID

2.配置controller節(jié)點(diǎn),添加以下環(huán)境變量

KAFKA_CFG_PROCESS_ROLES=controller
KAFKA_CFG_NODE_ID=<unique_id>
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=<controller1_node_id>@<controller1_host>:9093,<controller2_node_id>@<controller2_host>:9093,...
KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
KAFKA_CFG_LISTENERS=CONTROLLER://:9093
KAFKA_CFG_ZOOKEEPER_METADATA_MIGRATION_ENABLE=true
KAFKA_CFG_ZOOKEEPER_CONNECT=<zk_host>:<zk_port>
KAFKA_KRAFT_CLUSTER_ID=<cluster_id_step1>

3.使用遷移設(shè)置配置代理:

KAFKA_CFG_BROKER_ID=<current_broker_id>
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=<controller1_node_id>@<controller1_host>:9093,<controller2_node_id>@<controller2_host>:9093,...
KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
KAFKA_CFG_INTER_BROKER_PROTOCOL_VERSION=3.4
KAFKA_CFG_ZOOKEEPER_METADATA_MIGRATION_ENABLE=true
KAFKA_CFG_ZOOKEEPER_CONNECT=<zk_host>:<zk_port>

4.遷移代理:

KAFKA_CFG_PROCESS_ROLES=broker
KAFKA_CFG_NODE_ID=<unique_id>
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=<controller1_node_id>@<controller1_host>:9093,<controller2_node_id>@<controller2_host>:9093,...
KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER

5.禁用控制器上的遷移模式:

KAFKA_CFG_PROCESS_ROLES=controller
KAFKA_CFG_NODE_ID=<unique_id>
KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=<controller1_node_id>@<controller1_host>:9093,<controller2_node_id>@<controller2_host>:9093,...
KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
KAFKA_CFG_LISTENERS=CONTROLLER://:9093
KAFKA_KRAFT_CLUSTER_ID=<cluster_id_step1>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市榄审,隨后出現(xiàn)的幾起案子砌们,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浪感,死亡現(xiàn)場離奇詭異昔头,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)影兽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門揭斧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人峻堰,你說我怎么就攤上這事讹开。” “怎么了捐名?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵旦万,是天一觀的道長。 經(jīng)常有香客問我镶蹋,道長成艘,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任梅忌,我火速辦了婚禮狰腌,結(jié)果婚禮上除破,老公的妹妹穿的比我還像新娘牧氮。我一直安慰自己,他們只是感情好瑰枫,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布踱葛。 她就那樣靜靜地躺著,像睡著了一般光坝。 火紅的嫁衣襯著肌膚如雪尸诽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天盯另,我揣著相機(jī)與錄音性含,去河邊找鬼。 笑死鸳惯,一個胖子當(dāng)著我的面吹牛商蕴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播芝发,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼绪商,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了辅鲸?” 一聲冷哼從身側(cè)響起格郁,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后例书,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锣尉,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年决采,在試婚紗的時候發(fā)現(xiàn)自己被綠了悟耘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡织狐,死狀恐怖暂幼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情移迫,我是刑警寧澤旺嬉,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站厨埋,受9級特大地震影響邪媳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜荡陷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一雨效、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧废赞,春花似錦徽龟、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至耘沼,卻和暖如春极颓,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背群嗤。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工菠隆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人狂秘。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓骇径,卻偏偏與公主長得像,于是被迫代替她去往敵國和親赃绊。 傳聞我的和親對象是個殘疾皇子既峡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354

推薦閱讀更多精彩內(nèi)容