신입개발자

Kafka broker, controller 분리 본문

개인 개발 공부

Kafka broker, controller 분리

dks_a 2023. 8. 31. 14:21

broker : 토픽의 데이터 저장하고, 프로듀서로부터 메시지 받아 저장하고, 컨슈머에게 메시지 전달하는 역할

controller : 파티션 리더와 복제를 관리하는 역할

※ controller 를 나중에 추가하면 발생하는 에러

[2023-07-31 09:42:47,913] ERROR [SharedServer id=4] Got exception while starting SharedServer (kafka.server.SharedServer)
java.lang.IllegalStateException: Configured voter set: [4, 5, 6, 7, 8] is different from the voter set read from the state file: [4, 5, 6]. Check if the quorum configuration is up to date, or wipe out the local state file if necessary
	at org.apache.kafka.raft.QuorumState.initialize(QuorumState.java:132)
	at org.apache.kafka.raft.KafkaRaftClient.initialize(KafkaRaftClient.java:370)
	at kafka.raft.KafkaRaftManager.buildRaftClient(RaftManager.scala:248)
	at kafka.raft.KafkaRaftManager.<init>(RaftManager.scala:174)
	at kafka.server.SharedServer.start(SharedServer.scala:247)
	at kafka.server.SharedServer.startForController(SharedServer.scala:129)
	at kafka.server.ControllerServer.startup(ControllerServer.scala:197)
	at kafka.server.KafkaRaftServer.$anonfun$startup$1(KafkaRaftServer.scala:95)
	at kafka.server.KafkaRaftServer.$anonfun$startup$1$adapted(KafkaRaftServer.scala:95)
	at scala.Option.foreach(Option.scala:437)
	at kafka.server.KafkaRaftServer.startup(KafkaRaftServer.scala:95)
	at kafka.Kafka$.main(Kafka.scala:113)
	at kafka.Kafka.main(Kafka.scala)

현재는 kraft 에서 컨트롤러를 추가했을 때 발생하는 에러

[해결 방법]

https://www.orchome.com/10529

 

kafka报Configured voter set: [1, 2] is different from the voter set read from the state file: [1]. Check if the quorum configur

我使用kafka 3.0.0的KRaft模式,安装kafka集群,报: java.lang.IllegalStateException: Configured voter set: [1, 2] is different from the voter set read from the state file: [1]. Check if the quorum configuration is up to date, or wipe out the lo

www.orchome.com

 

  • Default : 브로커 3대, 컨트롤러 3대 / 컨슈머가 2개고 파티션 할당 전략이 RoundRobin경우
  • ACKS : ALL (-1)

[브로커 1대만 죽었을 때]
메세지 송수신이 원활하다. 모두 들어온다.

[브로커 2대 죽었을 때]
메세지 송수신이 원활하다. ( 브로커를 죽었다 재시작하면 LAG에 수가 높게 증가해있음)
모두 들어온다.

[브로커 모두 죽었을 때]
브로커가 모두 죽었을 때는 메세지 송수신이 불가
메세지 모두 들어온다.

  • ACKS : 0

[브로커 1대만 죽었을 때]
메세지가 모두 들어온다.

ACKS01.zip
0.01MB

[브로커 2대 죽었을 때]
메세지가 모두 들어온다.

ACKS02.zip
0.01MB


[브로커 모두 죽었을 때]
메세지 누수 발생

  • ACKS : 1

[브로커 1대만 죽었을 때]
메세지가 모두 들어온다.

ACKS11.zip
0.01MB

[브로커 2대 죽었을 때]
메세지가 모두 들어온다.

ACKS12.zip
0.01MB


[브로커 모두 죽었을 때]
메세지가 모두 들어온다.

  • 컨트롤러 3대일 때

[컨트롤러가 한대 죽었을 때]
파티션도 추가되고 토픽도 생성됨

 

[컨트롤러가 두대 죽었을 때]
파티션 추가 안됨 timeout

 

[컨트롤러가 세대 죽었을 때]
파티션 추가 안됨 timeout

 

 

  • 컨트롤러 5대일 때

2대까지는 모두 잘 돌아감
3대 망가짐

 

토픽 만들때
400 Bad Request
Call(callName=createTopics, deadlineMs=1690778366044, tries=2, nextAllowedTryMs=1690778366149) timed out at 1690778366049 after 2 attempt(s)

 

파티션 추가할 때
500 Internal Server Error
Timed out waiting to send the call. Call: createPartitions

'개인 개발 공부' 카테고리의 다른 글

Grafana 모니터링 화면  (0) 2023.08.31
Kafka 백업/이관/업그레이드 과정 정리  (0) 2023.08.31
Kafka 고가용성 테스트  (0) 2023.08.31
Kafka Consumer  (0) 2023.08.31
Kafka Stream  (0) 2023.08.31
Comments