오늘날의 소프트웨어 개발 분야에서 컨테이너화 기술은 점점 더 대중적인 배포 방법이 되었습니다. 가장 널리 사용되는 컨테이너화 솔루션 중 하나인 Docker는 개발자에게 편리한 환경 격리 및 배포 방법을 제공합니다. Kafka를 메시지 큐 시스템으로 사용하는 개발자의 경우 Kafka와 Docker를 결합하면 개발 및 배포가 더욱 유연하고 효율적으로 이루어질 수 있습니다. 이 기사에서는 PHP 편집자 Xigua가 Docker에서 Kafka를 실행하는 방법을 소개하여 컨테이너화로 인한 편리함을 쉽게 누릴 수 있습니다.
confluence 문서(2~3단계)에 설명된 대로 로컬 컴퓨터에 단일 노드 kafka docker 컨테이너를 설정했습니다.
또한 내 로컬 컴퓨터에서 실행되는 클라이언트에서 연결할 수 있도록 Zookeeper의 포트 2181과 Kafka의 포트 9092를 노출했습니다.
으아악문제: 호스트에서 kafka에 연결하려고 하면 연결이 실패합니다. 이유는 无法解析地址:kafka:9092
.
이것은 내 자바 코드입니다:
으아악예외:
으아악질문: Docker에서 실행 중인 kafka에 연결하는 방법은 무엇입니까? 내 코드는 Docker가 아닌 호스트에서 실행됩니다.
참고: 이론적으로는 DNS 설정을 시도해 볼 수 있다는 것을 알고 있으며 /etc/hosts
하지만 이는 해결 방법입니다. 이렇지는 않아야 합니다.
여기에도 비슷한 질문이 있는데 ches/kafka
이미지를 기반으로 한 것입니다. 나는 confluenceinc
기반의 이미지를 사용하는데 이것은 다릅니다. ches/kafka
图像。我使用基于 confluenceinc
的图像,这是不一样的。
tl;dr - 从容器到主机的简单端口转发将不起作用...主机文件(例如 *NIX 系统上的 /etc/hosts
advertished.listeners
(不是 advertished.host.name
和 advertished.port
,因为这些已被弃用)。如果您看到诸如 Connection to node -1 (localhost/127.0.0.1:9092)
- 컨테이너에서 호스트로의 단순 포트 전달은 bootstrap.servers
一部分列出的服务器实际上是可解析的。例如 ping
IP/主机名,使用 netcat
检查端口...如果您的客户端位于容器中,则需要从容器执行此操作,而不是(仅)从主机执行此操作。如果容器没有立即崩溃以访问其 shell,请使用 docker exec
작동하지 않습니다
)을 수정해서는 안 됩니다. 가지고 다닐 수 있는. docker ps
显示 kafka 容器是从 0.0.0.0 映射的:<host_port> -> <advertished_listener_port> /tcp
로 설정되어 있는지 확인하세요. confluenceinc
docker 镜像来解决所提出的问题,不是 wurstmeister/kafka
。如果您设置了 KAFKA_ADVERTISED_HOST_NAME
와 같은 오류는 애플리케이션 컨테이너가 자체적으로 연결을 시도하고 있음을 의미합니다. 애플리케이션 컨테이너도 Kafka 브로커 프로세스를 실행하고 있나요? 아마.
2) 로 보장합니다.
3) 다른 컨테이너 대신 호스트에서 프로세스를 실행하는 경우 포트가 호스트에 올바르게 매핑되었는지 확인하려면 Docker 네트워크 외부에서 클라이언트를 실행하려는 경우 포트가 일치해야 합니다. 두 컨테이너 간에 포트 전달이 필요하지 않습니다. 링크/도커 네트워크를 사용하세요.
아래 답변은 제기된 문제를 해결하기 위해 confluenceinc
docker 이미지를 사용합니다. 아님 . KAFKA_ADVERTISED_HOST_NAME
변수를 설정한 경우 이를 제거하십시오(더 이상 사용되지 않는 속성입니다)
wurstmeister/kafka
모두 컨테이너 Kafka
에서 실행됩니다.구성 방법 a>에만 의존할 수 있습니다. 그리고 어떤 변수가 이 문제를 일으키는지.
bitnami/kafka
2023년 10월 현재 이 콘텐츠는 DockerHub에 더 이상 존재하지 않습니다. 어쨌든 2022년 이후에는 유지보수가 없습니다. wurstmeister
리스너 구성에 대한 추가 정보 섹션 을 참조하고
debezium/kafka
작은 용기를 원한다면 이것을 사용해 보세요. 이미지는 Confluence보다 훨씬 작고
보다 유지 관리가 더 좋습니다. 🎜리스너 구성은 Readme 파일을 참조하세요🎜. 🎜 🎜🎜🎜 관련 문서는 🎜여기🎜여기🎜에 언급되어 있습니다. 🎜NOTE: 게시된 호스트 및 포트 설정은 더 이상 사용되지 않습니다. 광고 Listeners는 둘 다 다룹니다. Confluence 컨테이너와 마찬가지로 Debezium은 KAFKA_
접두사가 붙은 프록시 설정을 사용하여 속성을 업데이트할 수 있습니다.
ubuntu/kafka
要求您通过 Docker 映像参数添加 --overrideadvertising.listeners=kafka:9092
...환경 변수에 비해 이식성이 떨어지므로 권장하지 않습니다spotify/kafka
더 이상 사용되지 않으며 더 이상 사용되지 않습니다. fast-data-dev
或 lensesio/box
스키마 레지스트리, Kafka Connect 등이 포함된 올인원 솔루션에 적합하지만 Kafka를 만 원하는 경우에는 비대해집니다. 또한 이는 컨테이너에서 여러 서비스를 실행하기 위한 Docker 안티 패턴입니다 Dockerfile
- 왜요? 다른 것들은 불완전합니까? 처음부터 시작하는 대신 풀 요청으로 시작하세요. 자세한 내용은 모든 기능을 갖춘 docker-compose
및 네트워크 다이어그램을 참조하세요. 이 블로그 작성자: @rmoff
Confluence Quick Start(Docker) 문서에서는 모든 생산 및 소비 요청이 Docker 네트워크 내에서 발생한다고 가정합니다.
자체 컨테이너에서 Kafka 클라이언트 코드를 실행하여(Docker 브리지 사용) kafka:9092
에 연결하는 문제를 해결할 수 있지만, 그렇지 않으면 컨테이너를 외부에 노출시키면서 더 많은 환경 변수를 추가해야 합니다. 네트워크의 Docker Work에서 실행됩니다.
먼저 리스너 프로토콜을 Kafka 프로토콜에 매핑하는 PLAINTEXT_HOST:PLAINTEXT
의 프로토콜 매핑을 추가하세요
키: KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
값: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
그런 다음 서로 다른 포트에 두 개의 광고 수신기를 설정합니다. (kafka
指的是 docker 容器名称;它也可能被命名为 broker
여기에서는 서비스 + 호스트 이름을 다시 확인하세요).
키: KAFKA_ADVERTISED_LISTENERS
값: PLAINTEXT://kafka:9092,PLAINTEXT_HOST://localhost:29092
여기의 프로토콜은 위의 프로토콜 매핑 설정 왼쪽 값과 일치한다는 점에 유의하세요
컨테이너를 실행할 때 -p 29092:29092
进行主机端口映射,并通告 PLAINTEXT_HOST
리스너를 추가하세요.
그러니까...(위 설정을 활용)
그래도 작동하지 않으면 두 옵션 모두 AD 설정 및 Docker 전달 포트와 일치하도록 KAFKA_LISTENERS
设置为包含 <PROTOCOL>://0.0.0.0:<PORT>
변경할 수 있습니다
로컬 호스트 및 관련 포트를 광고하면 예상한 대로 컨테이너 외부에 연결할 수 있습니다.
즉, Docker 네트워크 외부에서 Kafka 클라이언트(로컬에 설치했을 수 있는 CLI 도구 포함)를 실행할 때 localhost:29092
作为引导服务器,使用 localhost:2181
를 Zookeeper로 사용하세요(Docker 포트 전달 필요)
외부 서버에서 연결을 시도하는 경우 호스트의 외부 호스트 이름/IP(예: 192.168.x.y
) 는 물론/localhost 대신 광고해야 합니다.
단순히 포트 전달을 통해 로컬 호스트를 광고하는 것은 Kafka 프로토콜이 구성된 수신기를 계속해서 광고하기 때문에 작동하지 않습니다.
이 설정에는 동일한 로컬 네트워크에 있지 않은 경우 Docker 포트 전달 및 라우터 포트 전달(및 방화벽/보안 그룹 변경)이 필요합니다. 예를 들어 컨테이너가 클라우드에서 실행되고 있고 로컬 시스템에서 상호 작용하려는 경우입니다.
이것은 DNS 서비스 이름을 직접 사용할 수 있는 오류가 가장 적은 구성입니다.
Docker 네트워크 에서 애플리케이션 을 실행하는 경우 kafka:9092
(请参阅上面广告的 PLAINTEXT
侦听器配置)作为引导服务器,使用 zookeeper:2181
(위에 광고된 PLAINTEXT
리스너 구성 참조)를 부트스트랩 서버로 사용하고 zookeeper:2181
를 Zookeeper로 사용하세요. 다른 Docker 서비스 통신과 마찬가지로(포트 전달이 필요하지 않음)
별도 사용하는 경우 docker run
命令或 Compose 文件,则需要使用 compose networks
部分或 docker network --create
手动定义共享 network
전체 Confluence 스택에 대한 Compose 파일 예시를 확인하세요 또는 단일 브로커에 대한 더 간단한 스택의 경우.
여러 프록시를 사용하는 경우 고유한 호스트 이름과 광고 리스너를 사용해야 합니다. 예시 보기一个>
Docker(ksqlDB)에서 호스트의 Kafka에 연결
Kubernetes 배포에 관심이 있는 모든 사람:
위 내용은 Docker에서 실행 중인 Kafka에 연결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!