Java 如何使用jhipster在Kafka集群上设置多个代理
我用jhipster创建了一个基本应用程序,并添加了ApacheKafka。即使使用另一个解决方案(从我的应用程序到用于kafka的php客户端),我也可以生产和消费。 现在,我想在集群上创建多个代理,但不是从java创建.sh文件 我知道集群是使用server.properties文件设置的,其中包含代理id、日志目录和其他内容。但是在我的jhipster应用程序中,代理id是在kafka.yml中声明的,所以我想我必须编辑.yml文件来声明另一个代理Java 如何使用jhipster在Kafka集群上设置多个代理,java,apache-kafka,jhipster,Java,Apache Kafka,Jhipster,我用jhipster创建了一个基本应用程序,并添加了ApacheKafka。即使使用另一个解决方案(从我的应用程序到用于kafka的php客户端),我也可以生产和消费。 现在,我想在集群上创建多个代理,但不是从java创建.sh文件 我知道集群是使用server.properties文件设置的,其中包含代理id、日志目录和其他内容。但是在我的jhipster应用程序中,代理id是在kafka.yml中声明的,所以我想我必须编辑.yml文件来声明另一个代理 version: '2' service
version: '2'
services:
zookeeper:
image: confluentinc/cp-zookeeper:5.2.1
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_SYNC_LIMIT: 2
ports:
- 2181:2181
kafka:
image: confluentinc/cp-kafka:5.2.1
environment:
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_BROKER_ID: 2
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
ports:
- 9092:9092
目标是使用kafka创建一个jhipster应用程序,在集群中创建多个代理,而不是一个。因此,我将有多个主题。
我没有任何结果您可以通过在docker-compose.yml文件中添加更多代理,在/cp kafka中创建多个代理
version: '2'
services:
zookeeper:
image: confluentinc/cp-zookeeper:5.2.1
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_SYNC_LIMIT: 2
ports:
- 2181:2181
kafka-1:
image: confluentinc/cp-kafka:latest
hostname: kafka-1
ports:
- "19092:19092"
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-1:19092
kafka-2:
image: confluentinc/cp-kafka:latest
hostname: kafka-2
ports:
- "29092:29092"
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 2
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-2:29092
kafka-3:
image: confluentinc/cp-kafka:latest
hostname: kafka-3
ports:
- "39092:39092"
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 3
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-3:39092
参考:“因此我会有多个主题”==>不确定是否理解,但您不需要多个代理来处理多个主题,您可以只由一个代理处理多个主题
我真的不知道jhipster,但看起来你的yml文件和docker compose文件完全一样,所以我会给你我的2美分,就好像它是由docker compose启动的一样
您首先需要您的代理连接到同一个zookeeper集群,从我看到的情况来看应该没问题(如果您在同一docker compose yml文件中声明所有代理)
您需要使用客户端将访问的IP地址设置播发的侦听器,如果您使用localhost,它们将无法连接到您的代理:
KAFKA_播发的听众:明文://localhost:9092
应该是这样的:
卡夫卡的听众:明文://EXPOSEDIPADDRESS:9092
您还可以添加侦听器,如:
卡夫卡大学的听众:纯文本://0.0.0.0:9092
确保为每个代理使用不同的代理ID,并为每个代理使用不同的端口(如果它们在docker后面的同一个框中运行)
Yannick通过这个
docker compose.yml
可以得到一个包含三个代理的集群。代理可以从docker内部访问,如kafka1:9092、kafka2:9092、kafka3:9092
,也可以从docker主机访问,如localhost:19092、localhost:29092、localhost:39092
:
version: "3.7"
services:
zookeeper:
image: confluentinc/cp-zookeeper:5.4.0
hostname: zookeeper
container_name: zookeeper
ports:
- "2181:2181"
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
kafka1:
image: confluentinc/cp-server:5.4.0
hostname: kafka1
container_name: kafka1
depends_on:
- zookeeper
ports:
- "19092:19092"
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP:PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka1:9092,PLAINTEXT_HOST://localhost:19092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_CONFLUENT_LICENSE_TOPIC_REPLICATION_FACTOR: 1
KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'
kafka2:
image: confluentinc/cp-server:5.4.0
hostname: kafka2
container_name: kafka2
depends_on:
- zookeeper
ports:
- "29092:29092"
environment:
KAFKA_BROKER_ID: 102
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka2:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_CONFLUENT_LICENSE_TOPIC_REPLICATION_FACTOR: 1
KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'
kafka3:
image: confluentinc/cp-server:5.4.0
hostname: kafka3
container_name: kafka3
depends_on:
- zookeeper
ports:
- "39092:39092"
environment:
KAFKA_BROKER_ID: 3
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka3:9092,PLAINTEXT_HOST://localhost:39092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 2
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_CONFLUENT_LICENSE_TOPIC_REPLICATION_FACTOR: 1
KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'false'
所以我试着用你的yml和博客上的那个。首先我想知道他为什么要启动3 zookeeper服务器。我还有一个错误:[Consumer clientId=Consumer-1,groupId=group_id]无法建立到节点-1的连接。经纪人可能不在。控制台会打印一段时间。问题来自端口。它只接受9092。如果我使用9093或19092,则它不起作用。使用此配置,只能从docker composeIn创建的网络中的docker主机访问kafka代理。在这种情况下,生产者应连接到哪个kafka代理实例?@kamal您以kafka1:19092、kafka2:29092、kafka3:39092的身份连接到所有代理