试着搭建Apache Kafka Broker
首先
在本文档中,我们将记录用于测试环境的Apache Kafka Broker的设置步骤。
先决条件
-
- AMD64のコンテナ実行環境
-
- docker compose
- セットアップするコンテナとは別のJava実行環境 (動作確認で使います)
卡夫卡经纪人的配置
安装
使用Bitnami提供的Kafka Broker容器镜像作为Kafka Broker。关于环境变量的设定项,请参考Docker Hub上bitnami/kafka概述页面中详细说明。
下面指定了9092作为容器内部的通信端口,9093作为容器外部的通信端口。同时,使用PLAINTEXT作为安全协议。由于未进行加密、密码认证等设置,请作为测试环境使用目的而使用。
请根据需要,将IP地址的部分替换为适当的主机IP地址,并执行。
version: "2"
services:
zookeeper:
image: docker.io/bitnami/zookeeper:3.8
ports:
- "2181:2181"
volumes:
- "zookeeper_data:/bitnami"
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
kafka:
image: docker.io/bitnami/kafka:3.4
ports:
- "9092:9092"
- "9093:9093"
volumes:
- "kafka_data:/bitnami"
environment:
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- ALLOW_PLAINTEXT_LISTENER=yes
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
- KAFKA_CFG_LISTENERS=INTERNAL://:9092,EXTERNAL://:9093
- KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://192.168.1.3:9092,EXTERNAL://192.168.1.3:9093
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL
depends_on:
- zookeeper
volumes:
zookeeper_data:
driver: local
kafka_data:
driver: local
查看容器运行状态
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
37b52d5c953a bitnami/kafka:3.4 "/opt/bitnami/script…" 31 seconds ago Up 29 seconds 0.0.0.0:9092-9093->9092-9093/tcp, :::9092-9093->9092-9093/tcp kafka-kafka-1
95b691c7f378 bitnami/zookeeper:3.8 "/opt/bitnami/script…" 33 minutes ago Up 33 minutes 2888/tcp, 3888/tcp, 0.0.0.0:2181->2181/tcp, :::2181->2181/tcp, 8080/tcp kafka-zookeeper-1
使用 Kafka 客户端进行通信测试。
从两个终端登录到Kafka broker容器中,分别启动Producer和Consumer并进行操作验证。
启动Producer。在出现>后,键入字符串并按Enter键,消息将被发送到Consumer。- 在’–broker-list’中指定Kafka broker的IP地址和端口。因为它是一个列表,所以可以指定多个broker。
docker exec -it {bitnami/kafka Container ID} bash
/opt/bitnami/kafka/bin/kafka-console-producer.sh --broker-list 192.168.1.3:9092 --topic test
启动消费者。在下面的例子中,添加–from-beginning参数,可以从存储的现有消息中获取。如果不添加–from-beginning参数,则会接收到在启动后发送的消息。
docker exec -it {bitnami/kafka Container ID} bash
/opt/bitnami/kafka/bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.3:9092 --topic test --from-beginning
从容器外发送和接收消息
在Mac的情况下
在另一个Java执行环境中,下载Apache Kafka(二进制文件),解压后,切换到该目录。
tar xvof kafka_2.13-3.4.0.tgz
cd kafka_2.13-3.4.0
启动消费者。- 在topic中指定想要接收的主题名称。从容器内的Producer发送消息,并在另一个Java执行环境(例如我的 m1 mac)中确认可以接收到消息。
bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.3:9093 --topic test
对于Windows系统的情况是
在与容器不同的Java执行环境中下载并解压apach kafka(Binary)后,将整个文件夹移动到尽可能浅的层次结构下,如C驱动器根目录。同时,将文件夹名称从kafka_2.13-3.4.0重命名为kafka。
启动Consumer。可以通过指定topic来接收想要接收的主题名称。从容器内的Producer发送消息,然后在另一个Java执行环境中确认可以接收到消息。
cd C:\kafka
bin\windows\kafka-console-producer.bat --topic test --bootstrap-server 192.168.1.3:9093
Vantiq与Kafka代理服务器的连接
Vantiq Kafka源的配置要求其在网络上可通信。如果在云环境中构建了Kafka Broker,则需要进行安全配置以允许从互联网通过端口9093进行入站访问。
{
"bootstrap.servers": "http://192.168.1.3:9093",
"contentType": "application/json"
}
Vantiq Kafka源的消费者配置。安全配置条件与生产者相同。连接将包括“–from-beginning”选项。另外,Vantiq Kafka源是针对接收JSON配置的。请注意,如果连接到发送类似”hello world”的消息的主题,将会产生错误输出。
{
"consumer.topics": [
"test"
],
"bootstrap.servers": "sb://192.168.1.3:9093",
"contentType": "application/json"
}
仅提供一个中文选项:
参考资料
Kafka客户端监听器 – 详解