1. 시작
아래 선행작업이 필요합니다.(Zookeeper 설치)
https://hbcha0916.tistory.com/63
이제 카프카 클러스터를 구성해준다.
카프카는 Apache NiFi 클러스터와 함께 사용할 것이기 때문에 NiFi 에서 적용하는 기준으로 작성한다.
편의상 Kafka가 설치된 경로를 `$KAFKA_HOME`으로 이야기 하겠다.
1.1. 참고 - NiFi 클러스터 구성하기
https://hbcha0916.tistory.com/64
2. Kafka
- 고성능 분산 이벤트 스트리밍이다.
- 여기서 왜 NiFi Queue를 사용하지 않고 Kafka를 사용할까?
- NiFi Queue에 데이터가 쌓이면 NiFi가 부하 발생
- 그렇다고 NiFi Queue에 데이터가 쌓이는 한곗값을 올려버리면 너무 많은 서버 자원을 NiFi가 차지함
- 그리고 NiFi Queue에 데이터가 쌓이면 부모 Queue까지 데이터가 쌓여버리고, 결국 NiFi가 마비됨(서비스 불가)
3. 목표
Kafka 또한 NiFi와 같이 3개의 클러스터를 구성하고, 장애가 발생하여도 정상적인 서비스를 유지하기 위함
4. 설치
4.1. Kafka 다운로드
아래 사이트에서 희망하는 Kafka 버전 다운로드(Zookeeper설치 방법과 비슷함)(나는 3.5.1버전)
https://downloads.apache.org/kafka/
아래 버전 디렉토리에 들어가 "kafka_x.xx-x.x.x.tgz" 파일을 우클릭 후 링크복사한 다음 `wget`명령어로 다운로드한다.
wget https://downloads.apache.org/kafka/3.5.1/kafka_2.12-3.5.1.tgz
tar -zxvf kafka_2.12-3.5.1.tgz
5. 설정
5.1. server.properties
`$KAFKA_HOME/config/server.properties` 에서 nifi의 속성을 설정한다.
아래 내용을 수정/추가한다.
broker.id=1 #브로커별로 설정
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://node1:9092 #브로커별로 설정
zookeeper.connect=node1:2181,node2:2181,node3:2181 #주키퍼주소와 포트들
5.1.1. 참고
node1, node2, node3은 이전 내용에서 `/etc/hosts` 파일을 수정하여 네임서버를 설정해 주었다.
https://hbcha0916.tistory.com/63#4.2.%20%EB%84%A4%EC%9E%84%20%EC%84%9C%EB%B2%84%20%EB%A7%A4%ED%95%91%20%60%2Fetc%2Fhosts%60-1
6. Kafka 명령어
6.1. Kafka 실행
Kafka 서버를 시작한다.
$KAFKA_HOME/bin/kafka-server-start.sh -daemon $KAFKA_HOME/conf/server.properties
#코드사용법
$KAFKA_HOME/bin/kafka-server-start.sh -daemon <server.properties위치>
`-daemon` 옵션은 kafka를 데몬으로 실행한다는 옵션이다.
6.2. Topic생성
Topic를 생성한다. 물론 NiFi에서 Flow만 작성 후 실행하면 알아서 만들어주지만 이건 단일 클러스터일 경우이다.
반드시 Topic를 먼저 생성 후 Flow를 실행하자.
$KAFKA_HOME/bin/kafka-topics.sh --create --topic <토픽명> --bootstrap-server <카프카node:9092>,<카프카node2:9092>,<카프카node3:9092> --partitions <파티션 수> --replication-factor <복제본 수(노드 수에 맞게)> --config min.insync.replicas=<최소 kafka노드 개수>
7. Kafka GUI
유용한 툴 하나가 있다.
Kafka를 GUI로 모니터링 및 설정할 수 있는 툴이다.
Docker 를 사용해야 하며 프로그램은 아래 링크에 있다.
https://github.com/provectus/kafka-ui
참고
https://hbcha0916.tistory.com/66
8. NiFi TEST
아래와 같이 Flow를 생성해 주었다.
컨슈머를 3개를 한 이유는 단지 브로커가 3개이기 때문이다.
이미 테스트까지 한 Flow이다. 정상동작의 예이다.
8.1. PublishKafka Properties
기본 설정에서 추가/수정한 속성만 작성하였다.
Kafka Brokers | node1:9092,node2:9092,node3:9092 |
Topic Name | test |
Attributes to Send as Headers (Regex) | .* |
Use Transactions | false |
8.1.1. Kafka Brokers
카프카 브로커들의 주소(및 포트)들을 작성한다.
쉼표로 브로커를 구분짓는다.
8.1.2. Topic Name
토픽 이름 작성
6.2 에서 만든 토픽이름을 작성
8.1.3. Attributes to Send as Headers (Regex)
NiFi의 Flowfile Attribute를 해더로 보낼 수 있다.
이 중 어떤Flowfile Attribute을 해더로 보낼 것인지에 대한 정규식을 작성한다.
나는 Flowfile에 있는 모든 Attribute들을 보낼 것이기 때문에 `.*`로 작성하였다.
8.1.4. Use Transactions
NiFi가 Kafka와 통신할 때 NiFi가 Kafka의 트랜잭션을 보장하는지에 대한 여부를 설정한다.
8.2. ConsumeKafka
PublishKafka와 중복이 없고 기본 설정에서 추가/수정한 속성만 작성하였다.
Group ID | testGroup |
8.2.1. Group ID
컨슈머의 Group ID를 지정해준다.
별도로 지정해줄 필요 없이 해당 Properties에 작성하고 Flow를 실행시키면 자동으로 만들어준다.
주의할것은, 3개의 ConsumeKafka 모두 Group ID를 동일하게 설정해야 한다.
'클러스터 구성' 카테고리의 다른 글
[Elasticsearch][Ubuntu] Elasticsearch 구성하기 (0) | 2023.08.13 |
---|---|
[NiFi][Ubuntu] Apache NiFi cluster 구성하기 (0) | 2023.08.02 |
[zookeeper][Ubuntu] Apache zookeeper cluster 구성하기 (0) | 2023.08.01 |