ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • kafka multi-broker cluster
    카테고리 없음 2023. 4. 20. 09:53
    좀전에 카프카에 대허서 알아 봤다. 간단하게 설치도 하고 했는데 실 운영에서는 그렇게 못쓴다. 물론 주기퍼도 여러대 카프카도 여러대로 써야 하나의 서버가 죽더라도 운영은 계속 되어야 한다. 우리는 카프카의 멀티 broker의 설정에 대해 알아 보자 기존의 server.properties는 냅두고 server1.properties 와 server2.properties를 만들자.
    cp config/server.properties config/server1.properties
    cp config/server.properties config/server2.properties
    
    server.properties 복사하여 server1.properties, server2.properties를 아래와 같이 변경을 하자. server1.properties
    broker.id=1
    port=9093
    log.dir=/tmp/kafka-logs-1
    
    
    server2.properties
    broker.id=2
    port=9094
    log.dir=/tmp/kafka-logs-2
    
    
    위와 같이 설정만 하면 끝이다. 그런 후에 주기퍼를 실행하고 server.properties실행 server1.properties 실행 server2.properties 실행 순서로 실행을 시키자.
    bin/kafka-server-start.sh config/server.properties
    bin/kafka-server-start.sh config/server1.properties
    bin/kafka-server-start.sh config/server2.properties
    
    그리고 topic을 생성해야 된다.
    bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic
    
    topic 생성도 기존의 생성과는 약간 다르다. 현재 있는 topic의 리스트를 출력해보면 생성 되어있는 것을 확인 할 수 있다.
    bin/kafka-topics.sh --list --zookeeper localhost:2181
    my-replicated-topic
    test
    
    필자가 하다가 꼬였는지 server.properties의 클러스팅이 되지 않아 다시 server3.properties 를 만들어서 했다
    broker.id=3
    port=9095
    log.dir=/tmp/kafka-logs-3
    
    만약 상관 없이 된다면 위와 같이 하지 않아도 된다. 다음으로 topic의 정보들을 확인하여 보자.
    bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
    Topic:my-replicated-topic   PartitionCount:1    ReplicationFactor:3 Configs:
        Topic: my-replicated-topic  Partition: 0    Leader: 2   Replicas: 2,3,1 Isr: 3,1,2
    
    현재 Leader 3이고 Replicas는 구성된 노드의 목록이다. Isr는 현재 살아있는 노드를 출력하는 것이다. 저 숫자는 broker.id 를 기준으로 출력된다.
    bin/kafka-console-producer.sh --broker-list localhost:9093 --topic my-replicated-topic
    
    필자는 localhost:9093으로 접속했다. 원래는 9092로 접속하면 된다. 그리고나서 메시지를 입력해보자.
    hi wonwoo
    
    bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic my-replicated-topic
    hi wonwoo
    
    그후에 consumer를 실행시켜 해당 메시지가 왔는지 확인해보자. 그럼 정상적으로 메세지가 출력되었다. 그리고 나서 클러스팅을 위해 리더를 죽여보자. 현재 리더가 필자와 다를 수 있으니 리더의 id를 확인하여 죽이자. 현재 필자의 리더 id는 2이기 때문에 server-2를 찾아서 죽였다.
    ps -ef | grep server-2
    kill -9 {pid}
    
    kill을 한뒤에 다시 한번 정보를 살펴보자.
    bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic
    Topic:my-replicated-topic   PartitionCount:1    ReplicationFactor:3 Configs:
        Topic: my-replicated-topic  Partition: 0    Leader: 3   Replicas: 2,3,1 Isr: 3,1
    
    현재 필자의 리더의 id는 3이며 살아있는 노드들은 3번과 1번임을 알수 있다. 그후에 다시 consumer에 접속을 해보자.
    bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic my-replicated-topic
    hi wonwoo
    
    리더를 죽여도 잘 실행 된다. 만약 consumer를 실행 시키는 중에 kill을 하면 에러로그가 일정시간동안 올라온다. 리더를 승격 시키기 전까지의 통신을 할 수 없으므로 나오는 에러인 듯 싶다. 에러로그가 일정 시간 출력 되고 다시 메시지를 발행하면 정상적으로 consumer가 받을 수 있다. 하지만 그 시간까지는 메시지가 유실 되는 듯 하다. 셋팅의 문제이지 않나 싶기도 한데.. 지금은 잘 모르겠다. 아무튼 이렇게 카프카에 대해서 살짝 맛만 봤다. kafka와 spark streaming도 한번 해봐야 겠다.

    댓글

Designed by Tistory.