์นดํ์นด ์ปจํ ์ด๋๋ฅผ ์ฌ์ฉํ ๋๋ง๋ค,
์ฌ์ฉ์ ์ธ์ฆ ์ค์ ์ ๋งค๋ฒ ํด์ฃผ๋ ๋ฒ๊ฑฐ๋ก์ ๋ค. ์ ์ด์ ์ฌ์ฉ์ ์ธ์ฆ ์ค์ ์ด ๋ค์ด๊ฐ ๋์ปค ์ด๋ฏธ์ง๋ฅผ ๋ง๋ค์ด๋ณด๋ฉด ์ด๋จ๊น? ๋ผ๋ ์๊ฐ์ด ๋ค์๋ค. ํ์ฌ ๋๋ฃ๋ค๋ ํธํ๊ฒ ํ๋ฒ์ ์ด๋ฏธ์ง ํ๋ฐ์์ ์ธ ์๋ ์์ผ๋ ํ๋ฒ ํด๋ณด์. gogo
1) Dockerfile ์์ฑ
์ด๋ฏธ์ง ๋ช - iabacus/kafka-plain-image:1.0.0
# Base image
FROM bitnami/kafka:latest
# Kafka configuration through environment variables
ENV KAFKA_CFG_BROKER_ID=100
ENV KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
ENV KAFKA_CFG_LISTENERS=PLAINTEXT://0.0.0.0:9092,SASL_PLAINTEXT://0.0.0.0:9093
ENV KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://192.168.2.52:9092,SASL_PLAINTEXT://192.168.2.52:9093
ENV KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,SASL_PLAINTEXT:SASL_PLAINTEXT
ENV KAFKA_CFG_SASL_ENABLED_MECHANISMS=PLAIN
ENV KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL=PLAIN
ENV KAFKA_CFG_INTER_BROKER_LISTENER_NAME=SASL_PLAINTEXT
ENV KAFKA_CLIENT_USERS=admin
ENV KAFKA_CLIENT_PASSWORDS=admin-secret
ENV KAFKA_CLIENT_LISTENER_NAME=SASL_PLAINTEXT
# JAAS configuration
RUN echo "KafkaServer {" > /opt/bitnami/kafka/config/jaas.conf && \\
echo " org.apache.kafka.common.security.plain.PlainLoginModule required" >> /opt/bitnami/kafka/config/jaas.conf && \\
echo " username=\\"admin\\" password=\\"admin-secret" >> /opt/bitnami/kafka/config/jaas.conf && \\
echo " user_admin=\\"admin-secret\\" user_user1=\\"user1-secret\\";" >> /opt/bitnami/kafka/config/jaas.conf && \\
echo "};" >> /opt/bitnami/kafka/config/jaas.conf && \\
echo "KafkaClient {" >> /opt/bitnami/kafka/config/jaas.conf && \\
echo " org.apache.kafka.common.security.plain.PlainLoginModule required" >> /opt/bitnami/kafka/config/jaas.conf && \\
echo " username=\\"admin\\" password=\\"admin-secret\\";" >> /opt/bitnami/kafka/config/jaas.conf && \\
echo "};" >> /opt/bitnami/kafka/config/jaas.conf
# Configure Kafka options to use JAAS configuration
ENV KAFKA_OPTS="-Djava.security.auth.login.config=/opt/bitnami/kafka/config/jaas.conf"
# Expose ports
EXPOSE 9092 9093
# Set default command
CMD ["sh", "-c", "/opt/bitnami/scripts/kafka/run.sh"]
๋ง๋ ๋์ปคํ์ผ์ ๋น๋
docker build -t iabacus/kafka-plain-image:1.0.0 .
๋น๋๋ ์ด๋ฏธ์ง๋ฅผ ์ปจํ ์ด๋๋ก ์คํ
docker run --name kafka1 -p 9092:9092 -p 9093:9093 --network kafka-net iabacus/kafka-plain-image:1.0.0
2) docker-compose.yml
์คํ ์์ ํ๊ฒฝ ๋ณ์ ๋์ ๋ณ๊ฒฝํด์ ์คํํ๋๋ก ๋์ปค ์ปดํฌ์ฆ ํ์ผ์ ์์ฑํ๋ค.
services:
kafka:
image: iabacus/kafka-plain-image:1.0.0
container_name: kafka-plain
ports:
- "9092:9092"
- "9093:9093"
environment:
KAFKA_CFG_BROKER_ID: 5
KAFKA_CFG_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://192.168.2.55:9092,SASL_PLAINTEXT://192.168.2.55:9093
networks:
- kafka-net
depends_on:
- zookeeper
zookeeper:
image: bitnami/zookeeper:latest
container_name: zookeeper-plain
ports:
- "2181:2181"
environment:
ALLOW_ANONYMOUS_LOGIN: "yes"
networks:
- kafka-net
networks:
kafka-net:
docker compose up
3) ์นดํ์นด ์ปจํ ์ด๋์ ํ ํฝ ์ํ ํ๋ ์์ฑ
์ด์ ํ ์คํธ๋ฅผ ํด๋ณด์. ์์ฑํ ์ปจํ ์ด๋์ ํ ํฝ์ ํ๋ ์์ฑํด์ค๋ค.
docker exec -it kafka-plain bash
kafka-topics.sh --create \\
--topic test-topic \\
--bootstrap-server 192.168.2.52:9092 \\
--replication-factor 1
์์ฑํ ํ ํฝ ํ์ธ !
kafka-topics.sh --list --bootstrap-server 192.168.2.52:9092
4) ์ธ๋ถ์์ ์ ์ ๊ฐ๋ฅํ์ง ํ์ธ
๋ค๋ฅธ ์๋ฒ์์ ์ ๊ทผํด๋ณด๊ธฐ
client-test.properties
kafka1์ binํด๋ ์์ ์์ฑ
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin-secret";
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
์๋ ๋ช ๋ น์ด๋ก ๋ด๊ฐ ๋ง๋ ์นดํ์นด์ ํ ํฝ ๋ชฉ๋ก์ ๊ฐ์ ธ์ค๋์ง (์ ๊ทผ์ด ๋๋์ง) ํ์ธ
kafka-topics.sh --list \\
--bootstrap-server 192.168.2.52:9093 \\
--command-config /opt/bitnami/kafka/bin/client-test.properties
์ ๊ฐ์ ธ์ค๋๊ฑฐ ํ์ธํ๊ณ
5) ๋์ปค ํ๋ธ์ ํธ์
์ง์ง ๋ด๊ฐ ๋ง๋ ๋์ปค ์ด๋ฏธ์ง๊ฐ ์ ๋๋์ง ํ์ธ์ด ๋์์ผ๋ ์๊ฒฉ ๋์ปคํ๋ธ์ ํธ์๋ฅผ ํด๋ณด์.
๋ฆฌ๋ ์ค ์ฐฝ์ ์๋ ๋ช ๋ น์ด๋ก ๋์ปค ํ๋ธ ๋ก๊ทธ์ธ
docker login
iabacus # ๋์ปคํ๋ธ ์ ์ ์ด๋ฆ
adasdfasdfasdfasdf # ๋น๋ฐ๋ฒํธ
ํธ์!!!!
docker push iabacus/kafka-plain-image:1.0.0
๋์ปค ํ๋ธ ์ค๋ช ์ ์๋์ ๊ฐ์ด ์์ฑํ์ฌ ์ฌ์ฉ์์๊ฒ ์๋ดํ๋ค. ํธํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก.
# **docker-compose.xml (sample)**
```
services:
kafka:
image: iabacus/kafka-plain-image:1.0.0
container_name: kafka-plain
ports:
- "9092:9092"
- "9093:9093"
environment:
KAFKA_CFG_BROKER_ID: 5
KAFKA_CFG_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_CFG_ADVERTISED_LISTENERS: PLAINTEXT://[kafak_server_IP]:9092,SASL_PLAINTEXT://[kafak_server_IP]:9093
networks:
- kafka-net
depends_on:
- zookeeper
zookeeper:
image: bitnami/zookeeper:latest
container_name: zookeeper-plain
ports:
- "2181:2181"
environment:
ALLOW_ANONYMOUS_LOGIN: "yes"
networks:
- kafka-net
networks:
kafka-net:
```
- `[kafak_server_IP]`,`KAFKA_CFG_BROKER_ID`, `KAFKA_CFG_ZOOKEEPER_CONNECT` ๋ฑ์ ์์ ํ์ฌ ์ ์ ํ ๊ฐ์ผ๋ก ์ค์ ํ์ธ์ !
## ํ ํฝ ์์ฑ (sample)
kafka-topics.sh --create \
--topic test-topic \
--bootstrap-server `[kafak_server_IP]`:9092 \
--replication-factor 1
## ์์ฑ๋ ํ ํฝ ํ์ธ (sample)
kafka-topics.sh --list --bootstrap-server `[kafak_server_IP]`:9092
# **์ธ๋ถ์์ ์ ์ ํ
์คํธ**
## client-test.properties (sample)
์ธ๋ถ์์ ํด๋น Kafka ์ปจํ
์ด๋๋ก ์ ์ ์ ์๋์ properties ํ์ผ์ด ํ์ํ๋ฏ๋ก ๋ณต์ฌํด์ ์ฌ์ฉํ์ธ์.
```bash
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin-secret";
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
```
### ์ธ๋ถ์์ ์ ๊ทผ์ด ๋๋์ง ํ์ธํ๋ ๋ช
๋ น์ด
```bash
kafka-topics.sh --list \
--bootstrap-server `[kafak_server_IP]`:9093 \
--command-config client-test.properties
```
์ค์ ๋ก ๋ด๊ฐ ๋ง๋ ์นดํ์นด ์ธ์ฆ์ด ์ ์ฉ๋ ์ด๋ฏธ์ง๊ฐ ์ ์ฌ๋ผ๊ฐ๋ค.
๊ฐ์ ํ๋ก์ ํธ ์งํ์ค์ธ ๋๋ฃ์๊ฒ ๋์ปค์ปดํฌ์ฆํ์ผ ์์ฑํด์ docker compose up ํด๋ณด๋ผ๊ณ ํ๋๋ฐ ์ ๋ฐ์์ก๊ณ , ์ ์ฌ์ฉ์ด ๋๋ค! gooooood~~~~~~~~~~~~
ํ๋ฒ ๋ง๋ค์ด๋์ผ๋ฉด ๋๊ณ ๋๊ณ ๋๋ ์ฐ๊ณ ๋๋ ์ฐ๋ ๋์ปค ์ด๋ฏธ์ง ๋๋ฌด ์ข๋ค!
์ปค์คํ ์ผ๋ก ๋ง๋ค ์ ์๋ ๊ฒ๋ ์ฌ๋ฐ๊ณ ํธํ๋ค. ์์ฃผ ์ ์ฉํด์ผ๊ฒ ๋ค ^^