SSH 터널을 통해 Kafka 소비자 전달

SSH 터널을 통해 Kafka 소비자 전달

Kafka 브로커는 10.2.1입니다.

이것은 작동합니다:

$ ssh me@jumpbox
me@jumpbox:~$ kafka-console-consumer.sh --bootstrap-server \
                                          "10.200.1.1:9092,10.200.1.2:9092" \
                                        --topic "mytopic"

다음은 수행되지 않습니다.

$ ssh me@jumpbox -L 9998:10.200.1.1:9092 \
                 -L 9999:10.200.1.2:9092

### in a new terminal:

$ kafka-console-consumer --bootstrap-server "localhost:9998,localhost:9999" \
                         --topic "mytopic"

왜 안 돼?

답변1

Kafka 브로커는 원래 호스트를 사용하도록 소비자를 리디렉션하기 때문입니다. 이것 좀 봐,https://stackoverflow.com/questions/45854168/consume-from-a-kafka-cluster-through-ssh-tunnel

답변2

이 문제를 해결하는 데 몇 시간이 걸렸습니다. 좋은 점은 해결 방법이 간단하다는 것입니다

내 상황은

  1. 10.155.10.2:9092에서 실행되는 AWS centos에 Kafaka 서버가 있습니다.
  2. 10.155.10.2:22 centos RSA 키 액세스를 사용하여 SSH용으로 열림

내 목표는 kafka-node를 사용하여 SSH 터널(포트 22)을 통해 win10에서 10.155.10.2:9092로 메시지를 생성하는 것입니다.

초기 노력

  1. 내 Win 10에서 cmd 창을 열고 ssh -i pathToMykeyFile -L 9092:10.155.10.2:9092를 실행합니다. [이메일 보호됨] 이 cmd 창을 열어두세요

  2. nodejs에서 다음을 사용하십시오. const client = new kafka.KafkaClient({ kafkaHost: 'localhost:9092 }) ... Producer.send(...)...

결과: 요청 시간이 초과되었습니다.

함정: Kakfka는 localhost:9092를 직접 입력하는 대신 연결할 브로커 주소를 반환합니다. 크기가 조정된 실제 브로커 주소는 Broker-ip-hostname과 같으며, 제가 얻은 반환 프록시 주소는 "ip-10-155-10-2입니다. ". ap-southeast-2.compute.internal" kafka-node의 소스 코드를 파헤쳐 찾아야 했습니다.

해결 방법: 실제 프록시 주소 127.0.0.1 ip-10-155-10-2.ap-southeast-2.compute.internal을 찾은 후 C:\Windows\System32\drivers\etc\hosts에 다음을 추가합니다.

관련 정보