使用 Docker Compose 創建 Kafka 主題
1. 概述
Apache Kafka 是著名的分佈式流平台,用於實時流記錄。它允許開發人員使用 Kafka 主題發布和訂閱記錄流。我們可以使用docker-compose
來使用多容器 Docker 應用程序來管理 Kafka 流。
在本教程中,我們將學習使用 Docker Compose 創建 Kafka 主題。此外,我們將使用單個 Kafka 代理髮布和使用來自該主題的消息。
2. 使用 Docker Compose 設置 Kafka
Docker Compose 工具可以方便地管理多個服務設置。 Kafka集群需要Zookeeper和Kafka代理,這在這種情況下非常有用。要設置 Kafka 集群,我們需要運行兩個服務:Zookeeper 和 Kafka Brokers。
讓我們看一下docker-compose.yml
來設置和運行 Kafka 服務器:
version: '3'
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: zookeeper
ports:
- "2181:2181"
networks:
- kafka-net
kafka:
image: wurstmeister/kafka
container_name: kafka
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_LISTENERS: INSIDE://kafka:9092,OUTSIDE://localhost:9093
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
KAFKA_LISTENERS: INSIDE://0.0.0.0:9092,OUTSIDE://0.0.0.0:9093
KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_CREATE_TOPICS: "baeldung:1:1"
networks:
- kafka-net
networks:
kafka-net:
driver: bridge
在上面的docker-comose.yml
中,我們運行兩個不同的服務。 Zookeeper 服務使用“wurstmeister/zookeeper”
作為基礎鏡像。此外,我們將容器的2181
端口暴露給主機,允許外部訪問Zookeeper。此外,我們以“wurstmeister/Kafka”
作為基礎鏡像運行 Kafka 服務。為了允許外部訪問Kafka服務器,我們暴露了9092
端口。
我們向 Kafka 服務提供了必要的 ENV 變量。這些 ENV 變量配置 Docker 網絡內部和外部的偵聽器設置。它使用 PLAINTEXT 協議,定義兩個偵聽器的綁定地址(0.0.0.0)
,指定“INSIDE”作為代理間偵聽器名稱,向 Zookeeper 提供連接字符串(使用容器名稱“zookeeper”
和端口2181
) ,並設置啟動一個名為“baeldung”
的主題,複製因子為1
,分區計數為1
。
3.啟動Kafka集群
到目前為止,我們研究了使用docker-compose.yml
創建服務來運行 Zookeeper 和 Kafka。為了演示,我們看一下啟動 Kafka 集群的命令:
$ docker-compose up -d
[+] Running 2/2
✔ Container zookeeper Running 0.0s
✔ Container kafka Started
上面的命令將簡單地以分離模式啟動 Zookeeper 和 Kafka 容器。這意味著我們可以與 Kafka 和 Zookeeper 交互,同時終端不受其他任務的影響。 -d
模式保證容器在後台運行,這有助於我們正確管理Kafka環境。
3.1.驗證Kafka集群
為了驗證Kafka集群是否運行成功,我們運行以下命令來查看正在運行的容器:
$ docker-compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
kafka wurstmeister/kafka "start-kafka.sh" kafka 27 seconds ago Up 27 seconds 0.0.0.0:9092->9092/tcp
zookeeper wurstmeister/zookeeper "/bin/sh -c '/usr/sb…" zookeeper 3 minutes ago Up 3 minutes 22/tcp, 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp
在上面的輸出中,我們可以看到 Zookeeper 和 Kafka 容器已啟動並正在運行。此驗證步驟確認 Kafka 集群已準備好處理主題和消息。因此,可以攝取來自各種來源的數據。
3.2.創建 Kafka 主題
至此,Kafka集群已經啟動並運行。現在,讓我們創建一個 Kafka 主題:
$ docker-compose exec kafka kafka-topics.sh --create --topic baeldung_linux
--partitions 1 --replication-factor 1 --bootstrap-server kafka:9092
在上面的命令中,使用端口9092
上的 Kafka 代理創建了一個名為baeldung_linux
的新主題,其中包含1
分區和1
副本集。現在使用這個主題,我們可以簡化 Kafka 數據。這將使我們能夠為各種應用程序交換消息和事件。
3.3.發布和消費消息
Kafka 主題就位後,讓我們發布和使用一些消息。首先,通過運行以下命令啟動消費者:
$ docker-compose exec kafka kafka-console-consumer.sh --topic baeldung_linux
--from-beginning --bootstrap-server kafka:9092
使用上面的命令,我們將能夠使用發送到該主題的所有消息。此外,我們使用–from-beginning
來消耗從一開始就通過該主題發送的所有消息。我們還看一下將數據發佈到這個 Kafka 主題:
$ docker-compose exec kafka kafka-console-producer.sh --topic baeldung_linux
--broker-list kafka:9092
通過使用上面的命令,我們可以生成消息並將其發送到baeldung_linux
主題。使用 Docker 向 Kafka 主題發送消息既簡單又高效。
4。結論
在本文中,我們探討瞭如何使用 Docker Compose 創建 Kafka 主題。首先,我們使用兩種不同的服務建立一個成熟的 Kafka 集群。我們使用 Docker Compose 運行 Kafka Zookeeper 和 Kafka Broker。之後,我們創建了一個Kafka主題,使用Kafka集群來發布和訂閱消息。
簡而言之,我們使用docker-compose
服務創建了一個簡單的 Kafka 集群。整個設置幫助我們通過docker-compose
服務在基於 Kafka 的應用程序中實時分發和通信數據。此外,它還可以幫助我們節省資源,因為我們不必一直運行 Kafka 集群。