설치

리눅스 업데이트

sudo apt update
sudo apt upgrade

포트 및 ip 확인

sudo apt install net-tools

ssh 설치

sudo apt intsll openssh-server

hyper-v 가상스위치 외부 접속 하나 추가 이후 ssh로 접속!(추가 시 서버끄고 추가)

docker 설치(공식 문서 참조)

sudo apt-get install ca-certificates curl gnupg

레파지토리 설정

echo
"deb [arch="(dpkgprintarchitecture)"signedby=/etc/apt/keyrings/docker.gpg]https://download.docker.com/linux/ubuntu "(. /etc/os-release && echo "$VERSION_CODENAME")" stable" |
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

sudo 없이 docker 명령(재부팅 필요)

sudo usermod -aG docker $USER

Dockerfile

mkdir kafka && cd kafka

vi Dockerfile

#22버전 활용
FROM ubuntu:22.04

RUN
apt-get update &&
apt-get install wget openjdk-17-jdk curl

EXPOSE 9092

CMD tail -f /dev/null

docker image build

mkdir data

docker build -t ubuntu-dev .
docker run -d -p 9092:9092 -v ~/kafka/data:/home/cleancode --name dev1 ubuntu-dev
docker exec -it dev1 /bin/bash

adduser cleancode

su - cleancode

mkdir kafka && cd kafka

wget https://dlcdn.apache.org/kafka/3.4.0/kafka_2.13-3.4.0.tgz

tar -xzf kafka_2.13-3.4.0.tgz && cd kafka_2.13-3.4.0

#순서 필요
nohup bin/zookeeper-server-start.sh config/zookeeper.properties > zookeeper-server-start-log.txt &
nohup bin/kafka-server-start.sh config/server.properties > kafka-server-start-log.txt &

bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partions 1 --topic input100-topic
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic input100-topic --from-beginning

spring boot로 생산 & 소비 테스트

curl -X POST -H "Content-Type: text/plain" --data "raw body data" http://localhost:8080/message

docker-compose.yml (cluster 3ea)

vi docker-compose.yml

version: '3'
services:
zookeeper-1:
container_name: zookeeper-1
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- 22181:2181

zookeeper-2:
container_name: zookeeper-2
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- 32181:2181

zookeeper-3:
container_name: zookeeper-3
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- 42181:2181

kafka-1:
container_name: kafka-1
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper-1
- zookeeper-2
- zookeeper-3

ports:
- 29092:29092
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-1:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

kafka-2:
container_name: kafka-2
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper-1
- zookeeper-2
- zookeeper-3
ports:
- 39092:39092
environment:
KAFKA_BROKER_ID: 2
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-2:9092,PLAINTEXT_HOST://localhost:39092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

kafka-3:
container_name: kafka-3
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper-1
- zookeeper-2
- zookeeper-3
ports:
- 49092:49092
environment:
KAFKA_BROKER_ID: 3
KAFKA_ZOOKEEPER_CONNECT: zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-3:9092,PLAINTEXT_HOST://localhost:49092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1

카프카1 브로커 찾기

docker ps

카프카1에서 토픽생성

docker exec -it kafka-1 bash
kafka-topics --create --bootstrap-server kafka-1:9092,kafka-2:9092,kafka-3:9092 --replication-factor 1 --partitions 1 --topic input100-topic

'''