Aji*_*ode 5 apache-kafka docker spring-boot
我遇到了 spring boot kafka docker 的问题,尝试了下面链接中提到的所有内容,但问题仍然存在。
附上我的 docker-compose.yml
version: '2'
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: zookeeper
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
container_name: kafka
ports:
- "9092:9092"
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
my-app:
image: my-app
container_name: my-app
ports:
- "8081:8081"
depends_on:
- zookeeper
- kafka
Run Code Online (Sandbox Code Playgroud)
错误日志
-1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
my-app | 2020-11-03 08:10:21.444 WARN 1 --- [| adminclient-1] org.apache.kafka.clients.NetworkClient : [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
Run Code Online (Sandbox Code Playgroud)
我正在运行 wrustmiester/kafka 和 wrustmiester/zookeeper。如果我在本地运行 spring boot 应用程序,一切都会顺利进行。
当我尝试构建 Spring Boot 应用程序的映像并运行该映像时,问题就出现了。然后错误是 Broker 可能不可用。
如果有人可以指导我,请。
添加我的 application.yml
spring:
kafka:
consumer:
bootstrap-servers: localhost:9092
group-id: group_id
auto-offset-reset: earliest
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
#org.apache.kafka.common.serialization.StringDeserializer
properties.spring.json.trusted.packages: com.myapp.pojo
producer:
bootstrap-servers: localhost:9092
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
#org.apache.kafka.common.serialization.StringSerializer
Run Code Online (Sandbox Code Playgroud)
将我的 docker-compose.yml 更新为
version: '3'
services:
zookeeper:
image: wurstmeister/zookeeper
container_name: zookeeper
network_mode: bridge
ports:
- "2181:2181"
kafka:
image: wurstmeister/kafka
container_name: kafka
network_mode: bridge
ports:
- "9092:9092"
hostname: kafka
environment:
KAFKA_ADVERTISED_HOST_NAME: kafka
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
# KAFKA_LISTENERS: INSIDE://:9092,OUTSIDE://:9094
# KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INSIDE:PLAINTEXT,OUTSIDE:PLAINTEXT
# KAFKA_INTER_BROKER_LISTENER_NAME: INSIDE
KAFKA_ADVERTISED_PORT: 9092
links:
- zookeeper
my-app:
image: my-app
container_name: my-app
network_mode: bridge
ports:
- "8081:8081"
depends_on:
- zookeeper
- kafka
Run Code Online (Sandbox Code Playgroud)
将我的 application.yml 更新为
spring:
kafka:
consumer:
bootstrap-servers: kafka:9092
group-id: group_id
auto-offset-reset: earliest
key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
value-deserializer: org.springframework.kafka.support.serializer.JsonDeserializer
#org.apache.kafka.common.serialization.StringDeserializer
properties.spring.json.trusted.packages: com.myapp.pojo
producer:
bootstrap-servers: kafka:9092
key-serializer: org.apache.kafka.common.serialization.StringSerializer
value-serializer: org.springframework.kafka.support.serializer.JsonSerializer
#org.apache.kafka.common.serialization.StringSerializer
Run Code Online (Sandbox Code Playgroud)
错误日志是一样的
WARN 1 --- [| adminclient-1] org.apache.kafka.clients.NetworkClient : [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
my-app | 2020-11-03 17:05:39.585 WARN 1 --- [| adminclient-1] org.apache.kafka.clients.NetworkClient : [AdminClient clientId=adminclient-1] Connection to node -1 (localhost/127.0.0.1:9092) could not be established. Broker may not be available.
Run Code Online (Sandbox Code Playgroud)
我能够解决我的问题。
这是我更新的 docker-compose.yml ,它可以工作,其余配置与上面相同
version: '2'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
kafka:
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper
ports:
- 9092:9092
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
my-app:
image: my-app
container_name: my-app
environment:
SPRING_KAFKA_BOOTSTRAPSERVERS: kafka:29092
ports:
- "8081:8081"
depends_on:
- kafka
Run Code Online (Sandbox Code Playgroud)
所做的更改是
我已经使用了汇合的卡夫卡和动物园管理员,但即使是上面的 docker-compose.yml 与 wrustmeister 卡夫卡和动物园管理员也可以工作。
最重要的财产
环境:SPRING_KAFKA_BOOTSTRAPSERVERS:kafka:29092
也正如 @OneCricketeer 所建议的
或者,如果所有三个客户端都与同一个集群通信,请从生产者和消费者中删除引导服务器,并使用 spring.kafka.bootstrap-servers 进行全局设置
我觉得即使这样也应该有效。
也许我可以稍后尝试这个并更新我的答案。
Ans*_*rma -1
我以几乎相同的方式做了同样的事情(差别很小),只需看看下面的撰写文件,如果这对您有用
version: '3'
services:
zookeeper:
image: wurstmeister/zookeeper
ports:
- 2181:2181
kafka:
image: wurstmeister/kafka
ports:
- 9092:9092
hostname: kafka
environment:
- KAFKA_ADVERTISED_HOST_NAME=kafka
- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
- KAFKA_ADVERTISED_PORT=9092
links:
- zookeeper
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9446 次 |
最近记录: |