kraft 구성에 대한 기본 작업 참고는 아래 사이트 참고하여 진행 했다.
spitha tech blog 인데 이직 해보고 싶은 회사다. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
https://medium.com/spitha-techblog/kafka-kraft-435fe2bab1de

 

:: 최초 작성 24.09.12 ::


###### kafka 버전 ?

3.8.0 이 최근에 나와서, 겸사겸사 신규 버전으로 테스트 한다.

해당 kafka 디렉토리 구성은 사내 적용하는 구성 기반으로 되어 있으므로,

kafka default setting 구조와는 다른 점을 인지하기바란다.

 

###### 구성 ?

서버 3대로 구성 한다.

 

###### properties 수정 ?

kafka_2.13-3.8.0/config/kraft/ 이하에 3개의 파일이 있다.

  - server.properties

  - broker.properties

  - controller.properties

 

여기서 server.properties 만 수정 하기로 한다.

 기존에 서비스 구조를 별도로 구성 했기 때문에, 사내 구성 작업 경로인 /kafka/app/configuration/ 로 파일을 복사하여 작업한다.

kafka+zookeeper용의 properties 중 하나도 server.properties로 동일한 이름을 쓰고 있기 때문에,

해당 파일은 아래와 같이 백업.

 $ cp -a server.properites server.properties_zookeeper_240912

 

KRaft 적용을 위한 server.properties config 중 변경한 내용은 아래와 같다.

변경사항 비고
node.id=1 node.id는 구성 서버가 3대라 각각 서버별로 1~3으로 매핑.
기존 server.properties의 broker.id 와 동일한 개념인 듯 싶다.
controller.quorum.voters=1@broker1:9093,2@broker2:9093,3@broker3:9093 기존에 없었던 구성. default 에서 node id@호스트명:9093 으로 해줌.
advertised.listeners=PLAINTEXT://broker1:9092 기존 server.properties도 localhost:9092를 지정한 호스트명(broker1~3) 으로 해줘서, 동일하게 변경해주었다.
log.dirs=/kaf_data default 에서 기존 사내 구성으로 만들어둔 데이터 저장 dir로 변경
offsets.topic.replication.factor=3 consumer offset 디렉토리를 broker 수 만큼으로 변경했다.

 

** 나머지 log retention이나 segment도 기존 kafka+zookeeper 구성할 때의 설정 값으로 바꿀까 했지만

kraft로 단순 테스트 진행 하는 부분이라 나머지 세팅은 default로 진행한당.

 

###### 스토리지 지정?

/kaf_log만 지정하면 되는 줄 알았는데,

위 사이트에서는 kafka-storage.sh 를 해줘야 한단다.

대충 아래의 순서인 것 같다.

순서/내용 명령어 비고
 1. random uuid 생성 [kafka@broker1 bin]$ ./kafka-storage.sh random-uuid
a8MbaPQ8Q3aXPXlx7liHYA
kafka-storage.sh 스크립트는 아래 경로에 있다.

/kafka/kafka_2.13-3.8.0/bin
 2. server.properties의 log.dir 에 uuid 매핑 [kafka@broker1 bin]$ ./kafka-storage.sh format -t a8MbaPQ8Q3aXPXlx7liHYA -c /kafka/app/configuration/server.properties


Formatting /kaf_data with metadata.version 3.8-IV0.
위 사이트에서는 format 명령어가 없었는데, 버전업 되면서 바뀐 것으로 보여졌다.

Formatting~ 은 명령어 친 후 나온 내용.

 

혹시 /kaf_data에 뭔가 내용이 있을까 싶어 확인해보니, meta.properties가 생성 되었다.

kafka+zookeeper 조합일 때는 서버 구성 후 기동 시에 meta.properties가 생성이 됐었는데,

기동 전의 작업으로 아래 경로에 파일이 생긴 것이다.

[kafka@broker1 bin]$ cd /kaf_data
[kafka@broker1 kaf_data]$ ll
total 8
-rw-r--r--. 1 kafka kafka 249 Sep 12 15:57 bootstrap.checkpoint
-rw-r--r--. 1 kafka kafka 122 Sep 12 15:57 meta.properties

[kafka@broker1 kaf_data]$ cat meta.properties
#
#Thu Sep 12 15:57:17 KST 2024
node.id=1
directory.id=wcRHO60oTZFDmy_wI36m4g
version=1
cluster.id=a8MbaPQ8Q3aXPXlx7liHYA

 

이어서 같은 uuid로 broker2, broker3번에 작업 진행 해준다.

 # ./kafka-storage.sh format -t a8MbaPQ8Q3aXPXlx7liHYA -c /kafka/app/configuration/server.properties

 

>>>> 초반 실수 포인트 <<<<

더보기

브로커 서버가 3대라 각각의 브로커에서 random uuid 생성하여 나머지 2대 서버에 매핑 해줘야 한다고 생각 했다.

그래서 맨처음 작업 시 broker2 와 broker3의 meta.properties 파일 내용은 아래와 같았다. 

broker2 broker3
[kafka@broker2 kaf_data]$ cat meta.properties
#
#Thu Sep 12 15:57:43 KST 2024
node.id=2
directory.id=U_P3fRM5GeLWzUqj7gXSxg
version=1
cluster.id=G9qCpQzeRgeUPtN21Ft6cw
[kafka@broker3 kaf_data]$ cat meta.properties
#
#Thu Sep 12 15:58:13 KST 2024
node.id=3
directory.id=g61OWvgxhH2j5FPJOLSYYw
version=1
cluster.id=XTn_nhnsSY--9Q-8MtUBXQ

서비스 기동 하니 broker 1~3 동일에러 발생 되었고, 

[2024-09-12 16:53:33,496] ERROR [RaftManager id=1] Unexpected error INCONSISTENT_CLUSTER_ID in VOTE response: InboundResponse(correlationId=2324, data=VoteResponseData(errorCode=104, topics=[]), source=broker3:9093 (id: 3 rack: null)) (org.apache.kafka.raft.KafkaRaftClient)

cluster id 문제인 것 같아  chat gpt 확인해보니, 각 서버별로 uuid를 매핑해서 난 문제라고 했다.

나는 당연히 각 서버별로 브로커도 다르고, 로컬 디스크를 받았기 때문에 각자 매핑 해야 한다 생각했는데..

  • 클러스터 ID Kafka 클러스터 전체에 대해 고유한 하나의 값이어야 하며, 모든 브로커가 동일한 클러스터 ID를 사용해야 합니다.
  • 각 브로커는 서로 다른 node ID를 가져야 하지만, 클러스터 ID는 동일해야 합니다.

그래서 broker2, 3번에 대해 uuid 재매핑을 진행 했다.

1. broker 2,3 shutdown 확인

2. broker 2,3 의 meta.properties 의 cluster id 수정

3. kafka 기동.

 

** kafka-storage.sh 명령어로 재수행 했더니 에러나서 meta.properties를 지우고 해볼까 하다가

그냥 meta.properties 파일 열어서 cluster.id를 수동으로 수정했다.

 

이후 kafka+zookeeper 조합일 때 백업해둔 meta.properties 보니,

3개 broker에서의 meta.properties가 전부 동일했다.

<< 기존 meta.properties >>

broker1 broker2 broker3
#
#Wed Sep 04 10:45:18 KST 2024
broker.id=1
version=0
cluster.id=Eku8xcieT6axELzAEvZfog
#
#Wed Sep 04 10:45:17 KST 2024
broker.id=2
version=0
cluster.id=Eku8xcieT6axELzAEvZfog
#
#Wed Sep 04 10:45:17 KST 2024
broker.id=3
version=0
cluster.id=Eku8xcieT6axELzAEvZfog

 

다른점 또 하나는 version 이었는데, kraft는 version=1로 확인 되고 있다.

#Thu Sep 12 15:57:43 KST 2024
node.id=2
directory.id=U_P3fRM5GeLWzUqj7gXSxg
version=1
cluster.id=G9qCpQzeRgeUPtN21Ft6cw

 

###### 기동 ?

과연 될까 ㅋㅋㅋㅋ

졸라 걱정되지만 일단 기동 해본다.

 

아래는 start script 일부.

export KAF_ENG=/kafka/kafka_2.13-3.8.0
export LOG_DIR_KAFKA=/svc_log/kaf_log
export APP_CONF=/kafka/app/configuration

LOG_DIR=$LOG_DIR_KAFKA $KAF_ENG/bin/kafka-server-start.sh -daemon $APP_CONF/server.properties

 

기동은 했는데,

server.log에 info가 디지게 찍히고, 에러같다 왠지. 뭐가문제일까 ㅋㅋㅋ

broker1 [2024-09-12 16:47:28,364] INFO [MetadataLoader id=1] initializeNewPublishers: the loader is still catching up because we still don't know the high water mark yet. (org.apache.kafka.image.loader.MetadataLoader)
broker2 [2024-09-12 16:47:28,803] INFO [MetadataLoader id=2] initializeNewPublishers: the loader
 is still catching up because we still don't know the high water mark yet. (org.apache.kafka.image.loader.MetadataLoader)
broker3 [2024-09-12 16:47:29,279] INFO [MetadataLoader id=3] initializeNewPublishers: the loader is still catching up because we still don't know the high water mark yet. (org.apache.kafka.image.loader.MetadataLoader)

 

 

그리고 kafka가 알아서 죽음 ㅋㅋㅋㅋ

 

생각해보니 aws 서비스포트에 9093 추가를 안해줘서, 9093 보안그룹 인바운드 넣어줬다.

그리고 나서 또 다른 Error가 있었으나 위에 >>>> 초반 실수 포인트 <<<< 해결하고 나니 정상적으로 기동 되었다.

 


 

###### 데이터 송수신

kraft-topic / rep 3 / part 3

kraft-tgroup

 

외부 서버에서 9092 로 bootstrap 3대 서버 붙여서 50개 데이터 흘렸고,

kafka+zookeeper 버전과 다를 바 없이 offset 잘 찍혀있는걸 확인 했다.

3대 클러스터가 잘 묶여있어서 조회 되는 부분은 동일 하다.

 

broker1 broker2 broker3
[kafka@broker1 kaf_data]$ cat replication-offset-checkpoint | awk '{ if($3 > 0)  print $1,$2,$3}'
__consumer_offsets 24 53
kraft-topic 1 17
kraft-topic 0 22
kraft-topic 2 11
[kafka@broker2 kaf_data]$ cat replication-offset-checkpoint | awk '{ if($3 > 0)  print $1,$2,$3}'
__consumer_offsets 24 53
kraft-topic 1 17
kraft-topic 0 22
kraft-topic 2 11
[kafka@broker3 kaf_data]$ cat replication-offset-checkpoint | awk '{ if($3 > 0)  print $1,$2,$3}'
__consumer_offsets 24 53
kraft-topic 1 17
kraft-topic 0 22
kraft-topic 2 11

 

topic list와 log 디렉토리 현황

[ topic status ]

Topic: kraft-topic TopicId: Vze9VkkDTDu4_KLHLjPq-A PartitionCount: 3 ReplicationFactor: 3 Configs: segment.bytes=1073741824
Topic: kraft-topic Partition: 0 Leader: 3 Replicas: 3,1,2 Isr: 3,1,2 Elr:  LastKnownElr: 
Topic: kraft-topic Partition: 1 Leader: 1 Replicas: 1,2,3 Isr: 1,2,3 Elr:  LastKnownElr: 
Topic: kraft-topic Partition: 2 Leader: 2 Replicas: 2,3,1 Isr: 2,3,1 Elr:  LastKnownElr: 

-------------------------

[ topic partition logfile size changed ]

-rw-r--r--. 1 kafka kafka 295 Sep 13 09:50 /kaf_data/kraft-topic-0/00000000000000000000.log
-rw-r--r--. 1 kafka kafka 244 Sep 13 09:50 /kaf_data/kraft-topic-1/00000000000000000000.log
-rw-r--r--. 1 kafka kafka 174 Sep 13 09:50 /kaf_data/kraft-topic-2/00000000000000000000.log

 

** Elr 이라는 개념이 3.8부터 생겼는데, 뭔지 잘 모르겠다.

Epoch leader recovery

Eligible leader replica

둘중 하나일 거 같은데 kafka 문서에서 도저히 못찾겠다..

728x90

'업무 > kafka zookeeper' 카테고리의 다른 글

[ERROR 기록] zookeeper 기동 관련(1)  (0) 2024.12.05
[작성 예정] AWS kafka 구성  (0) 2024.09.13
[etc] Kafdrop  (0) 2024.07.16
[kafka][zookeeper] min.insync.replicas  (0) 2024.04.02
[업무][kafka] 설치 구성 가안  (0) 2024.04.01

+ Recent posts