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
이 문제를 해결하는 데 몇 시간이 걸렸습니다. 좋은 점은 해결 방법이 간단하다는 것입니다
내 상황은
- 10.155.10.2:9092에서 실행되는 AWS centos에 Kafaka 서버가 있습니다.
- 10.155.10.2:22 centos RSA 키 액세스를 사용하여 SSH용으로 열림
내 목표는 kafka-node를 사용하여 SSH 터널(포트 22)을 통해 win10에서 10.155.10.2:9092로 메시지를 생성하는 것입니다.
초기 노력
내 Win 10에서 cmd 창을 열고 ssh -i pathToMykeyFile -L 9092:10.155.10.2:9092를 실행합니다. [이메일 보호됨] 이 cmd 창을 열어두세요
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에 다음을 추가합니다.