我正在開發一個應用程序,它從 sqs 隊列中讀取消息,對該數據執行一些操作,然后獲取結果并發布到 kafka 主題。為了在本地進行測試,我想在我的 docker 版本中設置一個 kafka 映像。我目前可以使用 docker-compose 在本地啟動 aws-cli、localstack 和我的應用程序的容器。另外,我也可以毫無問題地啟動 kafka 和 Zookeper。我無法讓我的應用程序與 kafka 通信。我嘗試過使用兩個單獨的撰寫文件,并且還擺弄了網絡。最后,我引用了:https://rmoff.net/2018/08/02/kafka-listeners-explained/。這是我的 docker-compose 文件:version: '3.7'services: localstack: image: localstack/localstack:latest container_name: localstack env_file: .env ports: # Localstack endpoints for various API. Format is localhost:container - '4563-4584:4563-4584' - '8080:8080' environment: - SERVICES=sns:4575,sqs:4576 - DATA_DIR=/tmp/localstack/data volumes: # store data locally in 'localstack' folder - './localstack:/tmp/localstack' networks: - my_network aws: image: mesosphere/aws-cli container_name: aws-cli # copy local JSON_DATA folder contents into aws-cli container's app folder #volumes: # - ./JSON_DATA:/app env_file: .env # bash entrypoint needed for multiple commands entrypoint: /bin/sh -c command: > " sleep 10; aws --endpoint-url=http://localstack:4576 sqs create-queue --queue-name input_queue; aws --endpoint-url=http://localstack:4575 sns create-topic --name input_topic; aws --endpoint-url=http://localstack:4575 sns subscribe --topic-arn arn:aws:sns:us-east-2:123456789012:example_topic --protocol sqs --notification-endpoint http://localhost:4576/queue/input_queue; " networks: - my_network depends_on: - localstack my_app: build: . image: my_app container_name: my_app env_file: .env ports: - '9000:9000' networks: - my_network depends_on: - localstack我希望發布到該主題時不會出現任何錯誤。相反,我得到:kafka: client has run out of available brokers to talk to (Is your cluster reachable?)有什么想法我可能做錯了嗎?感謝您的幫助。
1 回答

絕地無雙
TA貢獻1946條經驗 獲得超4個贊
通過僅將偵聽器設置為 localhost,您已使代理只能在 Kafka 容器本身(或從主機到容器)內解析。
如果您希望另一個 Docker 服務能夠訪問該容器,則必須添加<some protocol>://kafka:<some port>
到廣告偵聽器中,并將其設為listeners
非 localhost
協議也被添加到KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
FWIW,該博客應該涵蓋所有這些基礎。
- 1 回答
- 0 關注
- 235 瀏覽
添加回答
舉報
0/150
提交
取消