Kafka

본 문서에서는 Kafka에 관해 설명한다.

BXI의 기본 구성에서는 온라인 인스턴스가 거래 처리와 로깅을 모두 수행하지만, 로깅 인스턴스 및 Kafka를 이용해 로깅 역할을 분리할 수 있다. 거래 처리 스레드와 로깅 스레드를 분리하여 가용성을 높일 수 있다.

1. 아키텍처

kafka flow

BXI에서는 로그의 종류별로 Kafka 토픽을 생성하는데, 이 때 모든 토픽명은 로그명에 테넌트ID가 추가된 형태이다. (EX. errorLog_999: errorLog + _ + 테넌트ID)

BXI 엔진에서 온라인 인스턴스의 Producer는 각각의 토픽에 인입할 레코드를 생성해 Kafka 서버에 보내고, 로깅 인스턴스의 Consumer는 각각의 토픽에서 레코드를 가져와 DB에 Insert 하여 실제 로깅을 수행한다. 이 때 각 토픽에 대한 Producer와 Consumer는 별도의 스레드로 작동하는데, Consumer 스레드는 해당하는 토픽의 파티션 갯수만큼 생성되며, Producer는 그보다는 적게 생성된다.(파티션 수/5)

로깅 인스턴스는 거래 처리는 하지 않으나 에러가 발생할 수 있으므로, ErrorLogProducer가 추가로 존재한다.

2. 설정

Kafka 사용을 위해 필요한 설정 작업은 아래와 같다. 아래 작업을 완료 후 로그관리를 참조한다.

2.1. Kafka 서버가 1대인 경우

2.1.1. ZooKeeper 설정

config/zookeeper.properties
# zookeeper 데이터 경로 설정
dataDir=/tmp/zookeeper

# zookeeper 리슨 포트 설정
clientPort=2181

2.1.2. ZooKeeper 실행

bin/zookeeper-server-start.sh config/zookeeper.properties

2.1.3. Kafka 설정

config/server.properties
# Kafka 리스너 설정
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://localhost:9092

# Kafka 로그 디렉터리 설정
log.dirs=/tmp/kafka-logs

# zookeeper 리스너 주소 입력
zookeeper.connect=localhost:2181

2.1.4. Kafka 실행

bin/kafka-server-start.sh config/server.properties

2.1.5. 토픽 설정

ZooKeeper의 IP, Port 및 테넌트ID를 변경하여 bin/kafka-topics.sh를 아래와 같이 실행한다. Kafka를 1대만 사용하므로 replication-factor 는 1로 설정한다.

bin/create_kafka_topic.sh
bin/kafka-topics.sh --create --zookeeper localhost:2181 --topic errorLog_${TENANT_ID} --replication-factor 1 --partitions 5
bin/kafka-topics.sh --create --zookeeper localhost:2181 --topic imageLog_${TENANT_ID} --replication-factor 1--partitions 40
bin/kafka-topics.sh --create --zookeeper localhost:2181 --topic stctsLog_${TENANT_ID} --replication-factor 1 --partitions 5
bin/kafka-topics.sh --create --zookeeper localhost:2181 --topic txHistoryLog_${TENANT_ID} --replication-factor 1 --partitions 20
bin/kafka-topics.sh --create --zookeeper localhost:2181 --topic instanceMonitoringLog_${TENANT_ID} --replication-factor 1 --partitions 10

2.2. Kafka 서버가 3대 이상인 경우

각각의 서버에 모두 Kafka를 설치해 하단 설정을 모두 진행해야 한다.

2.2.1. ZooKeeper 설정

config/zookeeper.properties
# zookeeper 데이터 경로 설정
dataDir=/tmp/zookeeper

# zookeeper 리슨 포트 설정
clientPort=2181

initLimit=5
syncLimit=2

# Zookeeper 2888은 동기화를 위한 포트, 3888은 클러스터 구성 시, leader를 선출하기 위한 포트
server.1=서버1의IP:2888:3888
server.2=서버2의IP:2888:3888
server.3=서버3의IP:2888:3888

2.2.2. ZooKeeper 실행

각각의 서버에서 모두 실행한다.

bin/zookeeper-server-start.sh config/zookeeper.properties

2.2.3. Kafka 설정

config/server.properties
# Kafka 서버의 고유 ID. 반드시 Kafka 서버마다 달라야 한다.
broker.id=1

# Kafka 리스너 설정
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://localhost:9092

# Kafka 로그 디렉터리 설정
log.dirs=/tmp/kafka-logs

# zookeeper 리스너 주소 입력
zookeeper.connect=서버1의IP:2181,서버2의IP:2181,서버3의IP:2181

2.2.4. Kafka 실행

Kafka는 각 서버에서 모두 실행하고, 토픽 생성 스크립트는 하나의 서버에서만 실행하면 된다.

bin/kafka-server-start.sh config/server.properties

2.2.5. 토픽 설정

ZooKeeper의 IP, Port 및 테넌트ID를 변경하여 bin/kafka-topics.sh를 아래와 같이 실행한다. Kafka를 3대 이상 기동하므로 replication-factor는 2 또는 3을 설정한다.

bin/create_kafka_topic.sh
bin/kafka-topics.sh --create --zookeeper 서버1의IP:2181,서버2의IP:2181,서버3의IP:2181 --topic errorLog_${TENANT_ID} --replication-factor 3 --partitions 5
bin/kafka-topics.sh --create --zookeeper 서버1의IP:2181,서버2의IP:2181,서버3의IP:2181 --topic imageLog_${TENANT_ID} --replication-factor 3--partitions 40
bin/kafka-topics.sh --create --zookeeper 서버1의IP:2181,서버2의IP:2181,서버3의IP:2181 --topic stctsLog_${TENANT_ID} --replication-factor 3 --partitions 5
bin/kafka-topics.sh --create --zookeeper 서버1의IP:2181,서버2의IP:2181,서버3의IP:2181 --topic txHistoryLog_${TENANT_ID} --replication-factor 3 --partitions 20
bin/kafka-topics.sh --create --zookeeper 서버1의IP:2181,서버2의IP:2181,서버3의IP:2181 --topic instanceMonitoringLog_${TENANT_ID} --replication-factor 3 --partitions 10
SWLab Bankware Global
  • 전체
  • BXM
  • BXCM
  • BXCP
  • BXI
제품 선택 시 더 정확한 매뉴얼 가이드를 제공해드립니다.

Copyright© Bankwareglobal All Rights Reserved.