목차
질문 내용
解决方法
다음 섹션에서는 다른 이미지를 사용하는 데 필요한 모든 세부 사항을 요약합니다. 일반적으로 사용되는 다른 Kafka 이미지의 경우 wurstmeister/kafka모두 컨테이너
bitnami/kafka
기타
답변
클라이언트는 컨테이너가 아닌 동일한 머신에 있습니다
다른 컴퓨터의 클라이언트
동일한 호스트의 컨테이너에 있는 클라이언트(또는 다른 프록시)
관련 질문
부록
백엔드 개발 Golang Docker에서 실행 중인 Kafka에 연결

Docker에서 실행 중인 Kafka에 연결

Feb 14, 2024 pm 11:42 PM
네트워크 문제 overflow

连接到在 Docker 中运行的 Kafka

오늘날의 소프트웨어 개발 분야에서 컨테이너화 기술은 점점 더 대중적인 배포 방법이 되었습니다. 가장 널리 사용되는 컨테이너화 솔루션 중 하나인 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.nameadvertished.port,因为这些已被弃用)。如果您看到诸如 Connection to node -1 (localhost/127.0.0.1:9092)

tl;dr

- 컨테이너에서 호스트로의 단순 포트 전달은 bootstrap.servers 一部分列出的服务器实际上是可解析的。例如 ping IP/主机名,使用 netcat 检查端口...如果您的客户端位于容器中,则需要从容器执行此操作,而不是(仅)从主机执行此操作。如果容器没有立即崩溃以访问其 shell,请使用 docker exec작동하지 않습니다

... Kafka 네트워크 문제를 해결하기 위해 호스트 파일(예: *NIX 시스템의

)을 수정해서는 안 됩니다. 가지고 다닐 수 있는. docker ps 显示 kafka 容器是从 0.0.0.0 映射的:<host_port> -> <advertished_listener_port> /tcp

1) 정확히 어느 IP/호스트 이름 + 포트에 연결하시겠습니까? 프록시에서 값이

로 설정되어 있는지 확인하세요. confluenceinc docker 镜像来解决所提出的问题,不是 wurstmeister/kafka。如果您设置了 KAFKA_ADVERTISED_HOST_NAME와 같은 오류는 애플리케이션 컨테이너가 자체적으로 연결을 시도하고 있음을 의미합니다. 애플리케이션 컨테이너도 Kafka 브로커 프로세스를 실행하고 있나요? 아마.

2) 로 보장합니다. 3) 다른 컨테이너 대신 호스트에서 프로세스를 실행하는 경우 포트가 호스트에 올바르게 매핑되었는지 확인하려면 Docker 네트워크 외부에서 클라이언트를 실행하려는 경우 포트가 일치해야 합니다. 두 컨테이너 간에 포트 전달이 필요하지 않습니다. 링크/도커 네트워크를 사용하세요.
아래 답변은 제기된 문제를 해결하기 위해 confluenceinc docker 이미지를 사용합니다. 아님 . KAFKA_ADVERTISED_HOST_NAME 변수를 설정한 경우 이를 제거하십시오(더 이상 사용되지 않는 속성입니다)

다음 섹션에서는 다른 이미지를 사용하는 데 필요한 모든 세부 사항을 요약합니다. 일반적으로 사용되는 다른 Kafka 이미지의 경우 wurstmeister/kafka모두 컨테이너

Apache

Kafka

에서 실행됩니다.

구성 방법 a>에만 의존할 수 있습니다. 그리고 어떤 변수가 이 문제를 일으키는지.

bitnami/kafka

2023년 10월 현재 이 콘텐츠는 DockerHub에 더 이상 존재하지 않습니다. 어쨌든 2022년 이후에는 유지보수가 없습니다. wurstmeister 리스너 구성에 대한 추가 정보 섹션 을 참조하고

Connectivity wiki

도 읽어보세요. debezium/kafka

작은 용기를 원한다면 이것을 사용해 보세요. 이미지는 Confluence보다 훨씬 작고

보다 유지 관리가 더 좋습니다. 🎜리스너 구성은 Readme 파일을 참조하세요🎜. 🎜 🎜🎜🎜 관련 문서는 🎜여기🎜여기🎜에 언급되어 있습니다. 🎜

NOTE: 게시된 호스트 및 포트 설정은 더 이상 사용되지 않습니다. 광고 Listeners는 둘 다 다룹니다. Confluence 컨테이너와 마찬가지로 Debezium은 KAFKA_ 접두사가 붙은 프록시 설정을 사용하여 속성을 업데이트할 수 있습니다.

기타

  • ubuntu/kafka 要求您通过 Docker 映像参数添加 --overrideadvertising.listeners=kafka:9092...환경 변수에 비해 이식성이 떨어지므로 권장하지 않습니다
  • spotify/kafka 더 이상 사용되지 않으며 더 이상 사용되지 않습니다.
  • fast-data-devlensesio/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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

<gum> : Bubble Gum Simulator Infinity- 로얄 키를 얻고 사용하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
Nordhold : Fusion System, 설명
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora : 마녀 트리의 속삭임 - Grappling Hook 잠금 해제 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
<exp exp> 모호한 : 원정 33- 완벽한 크로마 촉매를 얻는 방법
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

H5 페이지 제작은 프론트 엔드 개발입니까? H5 페이지 제작은 프론트 엔드 개발입니까? Apr 05, 2025 pm 11:42 PM

예, H5 페이지 제작은 HTML, CSS 및 JavaScript와 같은 핵심 기술을 포함하는 프론트 엔드 개발을위한 중요한 구현 방법입니다. 개발자는 & lt; canvas & gt; 그래픽을 그리거나 상호 작용 동작을 제어하기 위해 JavaScript를 사용하는 태그.

오라클을 열 수 없다면해야 할 일 오라클을 열 수 없다면해야 할 일 Apr 11, 2025 pm 10:06 PM

Oracle에 대한 솔루션은 개설 할 수 없습니다. 1. 데이터베이스 서비스 시작; 2. 청취자를 시작하십시오. 3. 포트 충돌을 확인하십시오. 4. 환경 변수를 올바르게 설정하십시오. 5. 방화벽이나 바이러스 백신 소프트웨어가 연결을 차단하지 않도록하십시오. 6. 서버가 닫혀 있는지 확인하십시오. 7. RMAN을 사용하여 손상된 파일을 복구하십시오. 8. TNS 서비스 이름이 올바른지 확인하십시오. 9. 네트워크 연결 확인; 10. Oracle 소프트웨어를 다시 설치하십시오.

인라인 블록 요소가 왜 잘못 정렬됩니까? 이 문제를 해결하는 방법? 인라인 블록 요소가 왜 잘못 정렬됩니까? 이 문제를 해결하는 방법? Apr 04, 2025 pm 10:39 PM

인라인 블록 요소의 잘못 정렬 된 디스플레이에 대한 이유와 솔루션과 관련하여. 웹 페이지 레이아웃을 작성할 때, 우리는 종종 이상하게 겉보기에 이상한 디스플레이 문제가 발생합니다. 비교하다...

데비안 스니퍼의 출력 결과를 해석하는 방법 데비안 스니퍼의 출력 결과를 해석하는 방법 Apr 12, 2025 pm 11:00 PM

Debiansniffer는 네트워크 패킷 타임 스탬프를 캡처하고 분석하는 데 사용되는 네트워크 스나이퍼 도구입니다. 일반적으로 몇 초 만에 패킷 캡처 시간을 표시합니다. 소스 IP 주소 (sourceip) : 패킷을 보낸 장치의 네트워크 주소. 대상 IP 주소 (대상 IP) : 데이터 패킷을 수신하는 장치의 네트워크 주소. Sourceport : 패킷을 전송하는 장치에서 사용하는 포트 번호. Destinatio

CSS의 클립 경로 속성을 사용하여 세그먼터의 45도 곡선 효과를 달성하는 방법은 무엇입니까? CSS의 클립 경로 속성을 사용하여 세그먼터의 45도 곡선 효과를 달성하는 방법은 무엇입니까? Apr 04, 2025 pm 11:45 PM

세그먼터의 45도 곡선 효과를 달성하는 방법은 무엇입니까? 세분화 장치를 구현하는 과정에서 왼쪽 버튼을 클릭 할 때 오른쪽 테두리를 45도 곡선으로 바꾸는 방법과 포인트 ...

JavaScript 또는 CSS를 통해 브라우저 인쇄 설정에서 페이지 상단 및 끝을 제어하는 ​​방법은 무엇입니까? JavaScript 또는 CSS를 통해 브라우저 인쇄 설정에서 페이지 상단 및 끝을 제어하는 ​​방법은 무엇입니까? Apr 05, 2025 pm 10:39 PM

브라우저의 인쇄 설정에서 페이지의 상단과 끝을 제어하기 위해 JavaScript 또는 CSS를 사용하는 방법. 브라우저의 인쇄 설정에는 디스플레이가 ...인지 제어 할 수있는 옵션이 있습니다.

CSS를 통해 크기 조정 기호를 사용자 정의하고 배경색으로 균일하게 만드는 방법은 무엇입니까? CSS를 통해 크기 조정 기호를 사용자 정의하고 배경색으로 균일하게 만드는 방법은 무엇입니까? Apr 05, 2025 pm 02:30 PM

CSS에서 크기 조정 기호를 사용자 정의하는 방법은 배경색으로 통합됩니다. 매일 개발에서, 우리는 종종 조정과 같은 사용자 인터페이스 세부 정보를 사용자 정의 해야하는 상황을 발생시킵니다.

모바일 터미널의 멀티 라인 오버 플로우 누락과 호환되는 방법은 무엇입니까? 모바일 터미널의 멀티 라인 오버 플로우 누락과 호환되는 방법은 무엇입니까? Apr 05, 2025 pm 10:36 PM

VUE 2.0을 사용하여 모바일 애플리케이션을 개발할 때 다른 장치에서 멀티 로우 오버플로의 호환성 문제가 종종 텍스트를 넘어서야 할 필요성을 만듭니다 ...

See all articles