Kafka Kraft ๋ชจ๋๋?
Apache Kafka์์ ๊ธฐ์กด์ Zookeeper ์์กด์ฑ์ ์ ๊ฑฐํ๊ณ , Kafka ์์ฒด ๋ด์์ ๋ถ์ฐ ์์คํ ๊ด๋ฆฌ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋์ ๋ ์๋ก์ด ์ํคํ ์ฒ์ ๋๋ค. KRaft ๋ชจ๋๋ Kafka Raft Consensus Algorithm์ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌํ๋์ด Kafka ๋ธ๋ก์ปค๊ฐ ์์ฒด์ ์ผ๋ก ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ์ฅ์ ๋ณต๊ตฌ๋ฅผ ์ํํ ์ ์๋๋ก ์ค๊ณ๋์์ต๋๋ค.
KRaft ๋ชจ๋๋ Apache Kafka์ ์ด์ ๋ฐฉ์์ ํ์ ์ ์ธ ๋ณํ๋ฅผ ๊ฐ์ ธ์์ต๋๋ค. ๊ฐ์ฅ ํฐ ์ฅ์ ์ Zookeeper์ ์์กด์ฑ์ ์์ ํ ์ ๊ฑฐํ๋ค๋ ์ ์ ๋๋ค. ๋ฐฐํฌ์ ๊ด๋ฆฌ๊ฐ ํ๊ฒฐ ๊ฐ๋จํด์ก์ผ๋ฉฐ, Kafka๋ฅผ ์ด์ํ๋ ํ์ ๋ถ๋ด๋ ํฌ๊ฒ ์ค์ด๋ค์์ต๋๋ค. ๋ํ, KRaft๋ Kafka ์์ฒด์์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋๋ก ์ค๊ณ๋์ด ์ง์ฐ ์๊ฐ์ ์ค์ด๊ณ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ฑ๋ฅ์ ๋์ฑ ํฅ์์ํต๋๋ค. ๋ฐ์ดํฐ์ ๋ฉํ๋ฐ์ดํฐ ์ฒ๋ฆฌ๊ฐ ๋์ผํ ์์คํ ์์ ์ด๋ฃจ์ด์ง๋ ์ผ๊ด๋ ์ํคํ ์ฒ๋ ํฐ ์ฅ์ ์ ๋๋ค.
ํ์ง๋ง ๋์ ์ด๊ธฐ์ธ ๋งํผ ๋ช ๊ฐ์ง ๋จ์ ๋ ์กด์ฌํฉ๋๋ค. KRaft๋ ์์ง ์์ ์ฑ๊ณผ ์ ๋ขฐ์ฑ์ด ์ถฉ๋ถํ ๊ฒ์ฆ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์ค์ํ ํ๋ก๋์ ํ๊ฒฝ์ ๋์ ํ๋ ค๋ฉด ์ ์คํ ์ ๊ทผ์ด ํ์ํฉ๋๋ค. ๋ํ, ๊ธฐ์กด Zookeeper ๊ธฐ๋ฐ ํด๋ฌ์คํฐ๋ฅผ ์ ๊ทธ๋ ์ด๋ํ๋ ค๋ฉด ๋ง์ด๊ทธ๋ ์ด์ ์์ ์ด ์๊ตฌ๋๋ฉฐ, ์ด๋ ์๊ฐ๊ณผ ๋ ธ๋ ฅ์ด ํ์ํ ๊ณผ์ ์ ๋๋ค. ์๋ก์ด ์ด์ ๋ฐฉ์์ ๋ํ ํ์ต์ด ํ์์ ์ธ ์ ๋ ์ด์ํ์ ์ถ๊ฐ์ ์ธ ๋ถ๋ด์ด ๋ ์ ์์ต๋๋ค.
์ค์น
[.env]
IMAGE_TAG=3.9.0 # 3.9.0
IMAGE_NAME=apache/kafka-kraft-mode
SCALA_VERSION=2.13
CONTAINER_NAME=kafka
[server.properties]
# Server basics
process.roles=broker,controller
node.id=1
controller.quorum.voters=1@localhost:9093
log.dirs=/tmp/kafka-logs
# Metadata
metadata.log.dir=/tmp/kraft-metadata
# Listeners
listeners=PLAINTEXT://localhost:9092,CONTROLLER://localhost:9093
advertised.listeners=PLAINTEXT://localhost:9092
listener.security.protocol.map=PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT
controller.listener.names=CONTROLLER
# Replication factors
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
# Partitions and rebalance
num.partitions=1
group.initial.rebalance.delay.ms=0
[Dockerfile]
# Use a base image with Java
FROM openjdk:11-jre-slim
# Install dependencies
RUN apt-get update && apt-get install -y wget uuid-runtime && apt-get clean
# https://downloads.apache.org/kafka/
# Set an argument for Kafka version
ARG KAFKA_VERSION=${IMAGE_TAG:-3.9.0}
ARG SCALA_VERSION=${SCALA_VERSION:-2.13}
# Download Kafka
RUN wget https://downloads.apache.org/kafka/${KAFKA_VERSION}/kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz && \
tar -xzf kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz && \
mv kafka_${SCALA_VERSION}-${KAFKA_VERSION} /opt/kafka && \
rm kafka_${SCALA_VERSION}-${KAFKA_VERSION}.tgz
# Set environment variables
ENV PATH="/opt/kafka/bin:$PATH"
# Kafka configurations
ENV KAFKA_NODE_ID=1 \
KAFKA_PROCESS_ROLES=broker,controller \
KAFKA_LISTENERS=PLAINTEXT://localhost:9092,CONTROLLER://localhost:9093 \
KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 \
KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER \
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT \
KAFKA_CONTROLLER_QUORUM_VOTERS=1@localhost:9093 \
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 \
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR=1 \
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR=1 \
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS=0 \
KAFKA_NUM_PARTITIONS=1
# Create necessary directories
RUN mkdir -p /tmp/kraft-metadata /tmp/kafka-logs
# Copy Kafka properties
COPY server.properties /opt/kafka/config/server.properties
# Initialize Kafka storage
RUN kafka-storage.sh format -t $(uuidgen) -c /opt/kafka/config/server.properties
# Expose necessary ports
EXPOSE 9092 9093 2143
# Healthcheck
HEALTHCHECK --interval=10s --timeout=10s --retries=5 CMD kafka-broker-api-versions.sh --bootstrap-server localhost:9092 > /dev/null 2>&1
1. Dockerfile์ ๋น๋ํ๊ธฐ ์ํด .env๋ฅผ ์ ์ธํ๊ณ ์ํ๋ ๋ฒ์ ์ ๊ฐ์ ธ์จ๋ค.
2. server.properties์์ broker, cotroller์ ๋ํด ์ ์ํ ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
3. kafka-sever-start.sh ํ์ผ์ ์คํํ๋ค. (Docker image ๋ด์ ์ ์ฉ)
# Copy Kafka properties
COPY server.properties /opt/kafka/config/server.properties
'๐ข๏ธ Database' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐ์ดํฐ ์ด์ฃผ To NAS (synology, dropbox) (0) | 2024.09.03 |
---|---|
๋ฐ์ดํฐ ํ์ง์ ๋น๋ฐ (4) (0) | 2024.08.20 |
Data Orchestration (0) | 2024.08.03 |
๋ฐ์ดํฐ ํ์ง์ ๋น๋ฐ (3) (0) | 2024.07.30 |
Airflow Entrypoint (0) | 2024.07.28 |