VM 리눅스 환경에서 아파치 카프카 설치 및 클러스터 구성을 테스트 해보았다.
설치 및 구성은 아파치 공식 문서를 참고하여 진행함.
(https://kafka.apache.org/22/documentation.html)
1. 설치 파일 다운로드
https://kafka.apache.org/downloads
위 url에서 최신 버전의 Scala 2.12 - kafka_2.12-3.0.0.tgz (asc, sha512)를 설치 함.
2. kafka_2.12 Installation
[root@sydev bin]# pwd /home/kafka [root@sydev kafka]# tar xzvf kafka_2.12-3.0.0.tgz |
> 간단히 tar.gz 파일 압축 해제로 진행하면 된다.
3. Zookeeper 실행
[root@sydev kafka_2.12-3.0.0]# ./bin/zookeeper-server-start.sh ./config/zookeeper.properties ... [2021-10-19 10:15:11,266] INFO binding to port 0.0.0.0/0.0.0.0:2181 (org.apache.zookeeper.server.NIOServerCnxnFactory) |
> 위와 같이 binding to port:2181 메세지가 보이면 정상적으로 Zookeeper가 기동된 것이다.
4. 카프카(Broker) Server Startup
[root@sydev kafka_2.12-3.0.0]# ./bin/kafka-server-start.sh ./config/server.properties .... [2021-10-19 10:17:59,837] INFO Kafka startTimeMs: 1634606279822 (org.apache.kafka.common.utils.AppInfoParser) [2021-10-19 10:17:59,838] INFO [KafkaServer id=0] started (kafka.server.KafkaServer) |
> KafkaServer id=x started 메세지가 보이면 정상적으로 Broker Server가 기동되었다.
5. Topic Create & Topic List Check
[root@sydev kafka_2.12-3.0.0]# clear [root@sydev kafka_2.12-3.0.0]# ./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test Created topic test. .... 추가적으로 Topic 리스트로 확인 [root@sydev kafka_2.12-3.0.0]# ./bin/kafka-topics.sh --list --bootstrap-server localhost:9092 test |
> topic을 생성하고 topic 리스트 확인을 통해 정상적으로 생성되었는지 확인한다.
6. Send Message
[root@sydev kafka_2.12-3.0.0]# ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test > |
> Producer를 실행하여 test 라는 토픽에 메시지를 보내기 위해 실행한다. 실행하게 되면 ">"가 프롬프트에서 보인다.
그 뒤에 메세지를 입력하면 된다.
ex)
>test message
>hi
>my name is sangyeon
7. Start Consumer
[root@sydev kafka_2.12-3.0.0]# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning |
> Consumer 실행하게 되면 Producer 쪽에서 보낸 메세지를 받을 수 있다.
test message
hi
my name is sangyeon
8. Setting up a multi-broker Cluster(클러스터 구성)
[root@sydev kafka_2.12-3.0.0]# cp ./config/server.properties ./config/server-1.properties [root@sydev kafka_2.12-3.0.0]# cp ./config/server.properties ./config/server-2.properties ... config/server-1.properties: broker.id=1 listeners=PLAINTEXT://:9093 log.dirs=/tmp/kafka-logs-1 config/server-2.properties: broker.id=2 listeners=PLAINTEXT://:9094 log.dirs=/tmp/kafka-logs-2 |
> Broker 서버를 띄울 properties 파일을 추가적으로 생성해주고 포트와 로그 경로를 변경해준다.
이후에, 추가한 Broker 서버들을 기동해준다.
> bin/kafka-server-start.sh config/server-1.properties &
> bin/kafka-server-start.sh config/server-2.properties &
기동시 로그에 아래와 같이 클러스터가 정상적으로 연결됐다는 메세지를 확인할 수 있다.
server-0 [2021-10-19 10:50:52,082] INFO [Partition my-replicated-topic-0 broker=0] ISR updated to 0,1 and version updated to [6] (kafka.cluster.Partition) [2021-10-19 10:50:54,676] INFO [Partition my-replicated-topic-0 broker=0] ISR updated to 0,1,2 and version updated to [7] (kafka.cluster.Partition) server-1 [2021-10-19 10:50:52,056] INFO [BrokerToControllerChannelManager broker=1 name=alterIsr]: Recorded new controller, from now on will use broker sydev:9092 (id: 0 rack: null) (kafka.server.BrokerToControllerRequestThread) server-2 [2021-10-19 10:50:54,583] INFO [BrokerToControllerChannelManager broker=2 name=forwarding]: Recorded new controller, from now on will use broker sydev:9092 (id: 0 rack: null) (kafka.server.BrokerToControllerRequestThread) |
9. 클러스터 Fail-Over 테스트
9-1. 먼저 Replica Factor를 3개 추가해서 클러스터용 신규 토픽을 생성한다.
[root@sydev kafka_2.12-3.0.0]# ./bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 3 --partitions 1 --topic my-replicated-topic ... Created topic my-replicated-topic. ========================= 생성된 토픽에 대한 자세한 Describe 설명 조회 [root@sydev kafka_2.12-3.0.0]# bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic my-replicated-topic Topic: my-replicated-topic TopicId: qf1AFc-STwiZ6uOBX13Amw PartitionCount: 1 ReplicationFactor: 3 Configs: segment.bytes=1073741824 Topic: my-replicated-topic Partition: 0 Leader: 1 Replicas: 0,2,1 Isr: 1,0,2 |
> Leader : 지정된 파티션에 대한 모든 읽기/쓰기를 담당하는 노드이다. 현재 나의 예제에서는 Leader가 1번(*:9093)이다.
9-2. Fail-Over 테스트
- 프로듀서 실행 [root@sydev kafka_2.12-3.0.0]# ./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic >my test message 1 >my test message 2 - 컨슈머 실행 [root@sydev kafka_2.12-3.0.0]# ./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic my-replicated-topic my test message 1 my test message 2 현재 리더 역할을 하고 있는 server-1을 kill -9 로 Shutdown 시킨다. [root@sydev kafka_2.12-3.0.0]# netstat -anp|grep 9093 tcp6 0 0 :::9093 :::* LISTEN 28867/java [root@sydev kafka_2.12-3.0.0]# kill -9 28867 =========================================================== Leader인 브로커를 죽인 이후,, - 프로듀서 [root@sydev kafka_2.12-3.0.0]# bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic >my test message 1 >my test message 2 > >[2021-10-22 10:52:33,066] WARN [Producer clientId=console-producer] Connection to node 1 (sydev/192.168.56.106:9093) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient) [2021-10-22 10:52:33,158] WARN [Producer clientId=console-producer] Connection to node 1 (sydev/192.168.56.106:9093) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient) [2021-10-22 10:52:33,333] WARN [Producer clientId=console-producer] Connection to node 1 (sydev/192.168.56.106:9093) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient) [2021-10-22 10:52:33,682] WARN [Producer clientId=console-producer] Connection to node 1 (sydev/192.168.56.106:9093) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient) [2021-10-22 10:52:34,455] WARN [Producer clientId=console-producer] Connection to node 1 (sydev/192.168.56.106:9093) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient) >after failover >you ok? - 컨슈머 my test message 1 my test message 2 [2021-10-22 10:52:15,165] WARN [Consumer clientId=consumer-console-consumer-3714-1, groupId=console-consumer-3714] Connection to node 1 (sydev/192.168.56.106:9093) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient) [2021-10-22 10:52:15,369] WARN [Consumer clientId=consumer-console-consumer-3714-1, groupId=console-consumer-3714] Connection to node 1 (sydev/192.168.56.106:9093) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient) [2021-10-22 10:52:15,697] WARN [Consumer clientId=consumer-console-consumer-3714-1, groupId=console-consumer-3714] Connection to node 1 (sydev/192.168.56.106:9093) could not be established. Broker may not be available. (org.apache.kafka.clients.NetworkClient) ...(생략) after failover you ok? |
> 리더 브로커를 죽였지만, 이후에도 after failover, you ok? 메세지가 정상적으로 Producer를 통해 Consumer로 전달되는 것을 볼 수 있다.
이번에는 간단하게 리눅스 환경에서 Kafka 설치 및 클러스터 구성을 통한 failover 테스트 까지 해보았다.
'오픈소스 > Kafka' 카테고리의 다른 글
[카프카] G1GC 사용 시 권장할만한 파라미터 값 (0) | 2022.02.24 |
---|---|
[카프카] 기본 개념 소개 (0) | 2021.10.21 |