Kafka Error : Cannot open channel to 2 at election address ip:port 선택된 주소 ip:port에서 2에 대한 채널을 열 수 없습니다.

오랭·2022년 8월 24일
1
post-thumbnail

에러가 발생한 상황은 다음과 같다.

오류 발생

특정한 사유가 있어서 VM을 통째로 바꿔야 했다.

기존의 KAFKA-1,KAFKA-2,KAFKA-3에 KAFKA-NEW-1,KAFKA-NEW-2,KAFKA-NEW-3에 구축한 VM을 넣고 A와 B에 할당한 IP를 교환하여 재할당하는 작업이다.

먼저 Application에서 띄운 로그이다.

Tried to send a message to a replica that is not the leader for some partition. Your metadata is out of date.
일부 파티션의 리더가 아닌 복제본으로 메시지를 보내려고 했다. 메타데이터가 오래되었다.

// go application
// kafka library : gopkg.in/Shopify/sarama.v1 

이 메시지를 보고 처음에는 진짜 이해가 안갔다.

근데 하다보니 자꾸 허용된 host가 똑같은걸로 변경되었다고 한다.

[2022-08-13 03:25:37,058] INFO Resolved hostname: 10.20.300.403 to address: /10.20.300.403 (org.apache.zookeeper.server.quorum.QuorumPeer)

그런데 주기적으로 뜨는 확인된 호스트 이름에 대해서 언급하는 것을 보고 주키퍼 내부에서 서버의 hostname을 참조하는 것으로 추정했다.

새로 카프카를 띄운 서버는 -NEW가 붙어있었고 그전의 서버는 붙어있지 않았다.

그래서 일단 hostname에서 -NEW를 제거했다.

그러자 이제는 zookeeper log에서 connection refused가 뜨기 시작했다.

zookeeper.out

선택된 주소 ip:port에서 2에 대한 채널을 열 수 없습니다??????????
[2022-08-13 03:25:37,049] WARN Cannot open channel to 2 at election address /10.20.300.402:3888 (org.apache.zookeeper.server.quorum.QuorumCnxManager)
java.net.ConnectException: Connection refused (Connection refused)
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:607)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:562)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:538)
        at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:452)
        at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:433)
        at java.lang.Thread.run(Thread.java:750)
[2022-08-13 03:27:03,730] WARN Got zxid 0x2400000001 expected 0x1 (org.apache.zookeeper.server.quorum.Learner)

node 1 server.log

[2022-08-13 03:09:10,216] WARN Connection broken for id 3, my id = 1, error =  (org.apache.zookeeper.server.quorum.QuorumCnxManager)
java.net.SocketException: Connection timed out (Read failed)
        at java.net.SocketInputStream.socketRead0(Native Method)
        at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
        at java.net.SocketInputStream.read(SocketInputStream.java:171)
        at java.net.SocketInputStream.read(SocketInputStream.java:141)
        at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
        at java.io.BufferedInputStream.read(BufferedInputStream.java:265)
        at java.io.DataInputStream.readInt(DataInputStream.java:387)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager$RecvWorker.run(QuorumCnxManager.java:1013)
[2022-08-13 03:09:10,217] WARN Interrupting SendWorker (org.apache.zookeeper.server.quorum.QuorumCnxManager)
[2022-08-13 03:09:10,217] WARN Interrupted while waiting for message on queue (org.apache.zookeeper.server.quorum.QuorumCnxManager)
java.lang.InterruptedException
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2088)
        at java.util.concurrent.ArrayBlockingQueue.poll(ArrayBlockingQueue.java:418)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.pollSendQueue(QuorumCnxManager.java:1097)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager.access$700(QuorumCnxManager.java:74)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager$SendWorker.run(QuorumCnxManager.java:932)
[2022-08-13 03:09:10,217] WARN Send worker leaving thread (org.apache.zookeeper.server.quorum.QuorumCnxManager)

node 2 server.log

[2022-08-13 03:00:41,262] WARN Session 0x18293310e5e0002 for server null, unexpected error, closing socket connection and attempting reconnect (org.apache.zookeeper.ClientCnxn)
java.net.ConnectException: Connection refused
        at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
        at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:716)
        at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:361)
        at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1141)
[2022-08-13 03:00:41,442] INFO Opening socket connection to server 10.20.300.403/10.20.300.403:2181. Will not attempt to authenticate using SASL (unknown error) (org.apache.zookeeper.ClientCnxn)

node 3 server.log

[2022-08-13 03:01:16,392] WARN [Controller id=3, targetBrokerId=3] Connection to node 3 could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient)

해결방법

기존에 커넥션 맺고있는 ip(KAFKA-1,2,3)의 VM이 끊겼는데 새로운 곳과 맺으려 하니 생긴 이슈로 보였다.

그리고 kafka의 config 파일에 3개(ip로 설정 401,2,3)의 서버와 cluster를 맺도록 되어 있다.

기존에 떠있던 VM(KAFKA-1,2,3)에서 ip(401,2,3)를 빼서 새 VM(KAFAK-NEW-1,2,3 -> KAFKA-1,2,3)으로 이전 했을 때 같이 zookeeper에 등록 되었다거나, ip 변경으로 socket이 변경 인지를 못했다거나 하는 문제인 것 같았다.

이거는.. 조금 더 구체적으로 알아보아야 할것 같다.

아무튼 기존에 운영에서 돌고있던 KAFKA-1,2,3을 종료하는 것으로 오류는 해결 되었다.

아이콘 제작자: Retinaicons - Flaticon

profile
호기심천국

0개의 댓글