-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
315 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,315 @@ | ||
--- | ||
title: 카프카핵심가이드 2장 - 카프카 설치하기 | ||
description: 카프카 핵심가이드 책을 읽은 내용 정리 | ||
author: ydj515 | ||
date: 2024-10-12 09:27:00 +0800 | ||
categories: [books, kafka] | ||
tags: [kafka] | ||
pin: true | ||
math: true | ||
mermaid: true | ||
image: | ||
path: /assets/img/books/카프카핵심가이드/kafka-book-logo.jpg | ||
lqip: data:image/webp;base64,UklGRpoAAABXRUJQVlA4WAoAAAAQAAAADwAABwAAQUxQSDIAAAARL0AmbZurmr57yyIiqE8oiG0bejIYEQTgqiDA9vqnsUSI6H+oAERp2HZ65qP/VIAWAFZQOCBCAAAA8AEAnQEqEAAIAAVAfCWkAALp8sF8rgRgAP7o9FDvMCkMde9PK7euH5M1m6VWoDXf2FkP3BqV0ZYbO6NA/VFIAAAA | ||
alt: Kafka. The Definitive Guide. Real-Time Data and Stream Processing at. | ||
--- | ||
|
||
## 카프카 설치 | ||
2장은 카프카 설치를 다루고 있다. 이 내용을 docker-compose로 대체한다.<br/> | ||
기존 kafka에서는 zookeper를 사용하였으나 최신버전 kfaka 부터는 zookeeper를 사용하지않고 kraft를 사용한다. | ||
|
||
아파치 카프카 3.7 버전이 주키퍼 모드를 지원하는 마지막 버전이고, 이후 카프카 4.0 버전의 경우는 KRaft 모드로만 사용해야 합니다. ([참고자료](https://cwiki.apache.org/confluence/display/KAFKA/KIP-833%3A+Mark+KRaft+as+Production+Ready))<br/> | ||
|
||
|
||
### standalone kafka with zookeeper | ||
아래 docker-comspoe 파일은 `kafka 3.3.0` 기준으로 작성되었다. | ||
|
||
- docker-compose.yml | ||
|
||
```yml | ||
version: '3.8' | ||
services: | ||
zookeeper: | ||
image: confluentinc/cp-zookeeper:7.3.0 | ||
hostname: zookeeper | ||
container_name: zookeeper | ||
ports: | ||
- "2181:2181" | ||
environment: | ||
ZOOKEEPER_CLIENT_PORT: 2181 | ||
ZOOKEEPER_TICK_TIME: 2000 | ||
networks: | ||
- jpasample-network | ||
kafka: | ||
image: confluentinc/cp-kafka:7.3.0 | ||
hostname: kafka | ||
container_name: kafka | ||
depends_on: | ||
- zookeeper | ||
ports: | ||
- "29092:29092" | ||
- "9092:9092" | ||
- "9101:9101" | ||
environment: | ||
KAFKA_BROKER_ID: 1 | ||
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181' | ||
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT | ||
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://127.0.0.1:9092 | ||
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 | ||
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1 | ||
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1 | ||
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 | ||
KAFKA_JMX_PORT: 9101 | ||
KAFKA_JMX_HOSTNAME: localhost | ||
networks: | ||
- jpasample-network | ||
# kafka-connect: | ||
# image: confluentinc/cp-kafka-connect:7.0.1 | ||
# ports: | ||
# - "8083:8083" | ||
# container_name: kafka-connect | ||
# environment: | ||
# CONNECT_BOOTSTRAP_SERVERS: kafka:29092 | ||
# CONNECT_REST_PORT: 8083 | ||
# CONNECT_GROUP_ID: "quickstart-avro" | ||
# CONNECT_CONFIG_STORAGE_TOPIC: "quickstart-avro-config" | ||
# CONNECT_OFFSET_STORAGE_TOPIC: "quickstart-avro-offsets" | ||
# CONNECT_STATUS_STORAGE_TOPIC: "quickstart-avro-status" | ||
# CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1 | ||
# CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1 | ||
# CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1 | ||
# CONNECT_KEY_CONVERTER: "org.apache.kafka.connect.json.JsonConverter" | ||
# CONNECT_VALUE_CONVERTER: "org.apache.kafka.connect.json.JsonConverter" | ||
# CONNECT_INTERNAL_KEY_CONVERTER: "org.apache.kafka.connect.json.JsonConverter" | ||
# CONNECT_INTERNAL_VALUE_CONVERTER: "org.apache.kafka.connect.json.JsonConverter" | ||
# CONNECT_REST_ADVERTISED_HOST_NAME: "localhost" | ||
# CONNECT_LOG4J_ROOT_LOGLEVEL: WARN | ||
# CONNECT_PLUGIN_PATH: "/usr/share/java,/etc/kafka-connect/jars" | ||
# depends_on: | ||
# - kafka | ||
# volumes: | ||
# - ./docker-data-files/lib:/etc/kafka-connect/jars # https://www.confluent.io/hub/confluentinc/kafka-connect-jdbc에서 다운 받고 lib/하위의 jar 파일들을 lib폴더하위로 복사 | ||
# networks: | ||
# - jpasample-network | ||
kafka-ui: | ||
image: provectuslabs/kafka-ui:latest | ||
container_name: kafka-ui | ||
ports: | ||
- "8080:8080" | ||
environment: | ||
KAFKA_CLUSTERS_0_NAME: "local-kafka" | ||
KAFKA_CLUSTERS_0_BOOTSTRAP_SERVERS: "kafka:29092" | ||
KAFKA_CLUSTERS_0_ZOOKEEPER_CONNECT: "zookeeper:2181" | ||
depends_on: | ||
- kafka | ||
- zookeeper | ||
networks: | ||
- jpasample-network | ||
|
||
networks: | ||
jpasample-network: | ||
driver: bridge | ||
``` | ||
### kafka cluster with zookeeper | ||
아래 docker-comspoe 파일은 `kafka 3.3.0` 기준으로 작성되었다. | ||
|
||
- docker-compose.yml | ||
|
||
```yml | ||
version: '3.8' | ||
services: | ||
zookeeper: | ||
image: confluentinc/cp-zookeeper:7.3.0 | ||
hostname: zookeeper | ||
container_name: zookeeper | ||
ports: | ||
- "2181:2181" | ||
environment: | ||
ZOOKEEPER_CLIENT_PORT: 2181 | ||
ZOOKEEPER_TICK_TIME: 2000 | ||
networks: | ||
- jpasample-network | ||
kafka-1: | ||
image: confluentinc/cp-kafka:7.3.0 | ||
hostname: kafka-1 | ||
container_name: kafka-1 | ||
depends_on: | ||
- zookeeper | ||
ports: | ||
- "29091:29091" | ||
- "9091:9091" | ||
- "9101:9101" | ||
environment: | ||
KAFKA_BROKER_ID: 1 | ||
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181' | ||
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT | ||
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-1:29091,PLAINTEXT_HOST://127.0.0.1:9091 | ||
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3 | ||
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2 | ||
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3 | ||
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 | ||
KAFKA_JMX_PORT: 9101 | ||
KAFKA_JMX_HOSTNAME: localhost | ||
networks: | ||
- jpasample-network | ||
kafka-2: | ||
image: confluentinc/cp-kafka:7.3.0 | ||
hostname: kafka-2 | ||
container_name: kafka-2 | ||
depends_on: | ||
- zookeeper | ||
ports: | ||
- "29092:29092" | ||
- "9092:9092" | ||
- "9102:9102" | ||
environment: | ||
KAFKA_BROKER_ID: 2 | ||
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181' | ||
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT | ||
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-2:29092,PLAINTEXT_HOST://127.0.0.1:9092 | ||
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3 | ||
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2 | ||
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3 | ||
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 | ||
KAFKA_JMX_PORT: 9102 | ||
KAFKA_JMX_HOSTNAME: localhost | ||
networks: | ||
- jpasample-network | ||
kafka-3: | ||
image: confluentinc/cp-kafka:7.3.0 | ||
hostname: kafka-3 | ||
container_name: kafka-3 | ||
depends_on: | ||
- zookeeper | ||
ports: | ||
- "29093:29093" | ||
- "9093:9093" | ||
- "9103:9103" | ||
environment: | ||
KAFKA_BROKER_ID: 3 | ||
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181' | ||
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT | ||
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-3:29093,PLAINTEXT_HOST://127.0.0.1:9093 | ||
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3 | ||
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 2 | ||
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 3 | ||
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0 | ||
KAFKA_JMX_PORT: 9103 | ||
KAFKA_JMX_HOSTNAME: localhost | ||
networks: | ||
- jpasample-network | ||
kafka-ui: | ||
image: provectuslabs/kafka-ui:latest | ||
container_name: kafka-ui | ||
ports: | ||
- "8080:8080" | ||
environment: | ||
KAFKA_CLUSTERS_0_NAME: "local-kafka" | ||
KAFKA_CLUSTERS_0_BOOTSTRAP_SERVERS: "kafka-1:29091,kafka-2:29092,kafka-3:29093" | ||
KAFKA_CLUSTERS_0_ZOOKEEPER_CONNECT: "zookeeper:2181" | ||
depends_on: | ||
- kafka-1 | ||
- kafka-2 | ||
- kafka-3 | ||
- zookeeper | ||
networks: | ||
- jpasample-network | ||
networks: | ||
jpasample-network: | ||
driver: bridge | ||
``` | ||
|
||
### kafka cluster with KRaft | ||
|
||
- docker-compose.yml | ||
|
||
```yml | ||
version: '3.8' | ||
services: | ||
kafka-1: | ||
container_name: kafka-1 | ||
image: confluentinc/cp-kafka:7.5.3 | ||
ports: | ||
- "${KAFKA_1_PORT}:9092" | ||
# volumes: | ||
# - ./data/${KAFKA_DIR}/kafka-1:/var/lib/kafka/data | ||
environment: | ||
KAFKA_NODE_ID: 1 | ||
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT | ||
KAFKA_ADVERTISED_LISTENERS: INTERNAL://:29092,EXTERNAL://${DOCKER_HOST_IP}:${KAFKA_1_PORT} | ||
KAFKA_LISTENERS: INTERNAL://:29092,CONTROLLER://:29093,EXTERNAL://0.0.0.0:${KAFKA_1_PORT} | ||
KAFKA_PROCESS_ROLES: 'broker,controller' | ||
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka-1:29093,2@kafka-2:29093,3@kafka-3:29093 | ||
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL | ||
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER | ||
CLUSTER_ID: ${KAFKA_CLUSTER_ID} | ||
networks: | ||
- jpasample-network | ||
kafka-2: | ||
container_name: kafka-2 | ||
image: confluentinc/cp-kafka:7.5.3 | ||
ports: | ||
- "${KAFKA_2_PORT}:9093" | ||
# volumes: | ||
# - ./data/${KAFKA_DIR}/kafka-2:/var/lib/kafka/data | ||
environment: | ||
KAFKA_NODE_ID: 2 | ||
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT | ||
KAFKA_ADVERTISED_LISTENERS: INTERNAL://:29092,EXTERNAL://${DOCKER_HOST_IP}:${KAFKA_2_PORT} | ||
KAFKA_LISTENERS: INTERNAL://:29092,CONTROLLER://kafka-2:29093,EXTERNAL://0.0.0.0:${KAFKA_2_PORT} | ||
KAFKA_PROCESS_ROLES: 'broker,controller' | ||
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka-1:29093,2@kafka-2:29093,3@kafka-3:29093 | ||
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL | ||
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER | ||
CLUSTER_ID: ${KAFKA_CLUSTER_ID} | ||
networks: | ||
- jpasample-network | ||
kafka-3: | ||
container_name: kafka-3 | ||
image: confluentinc/cp-kafka:7.5.3 | ||
ports: | ||
- "${KAFKA_3_PORT}:9094" | ||
# volumes: | ||
# - ./data/${KAFKA_DIR}/kafka-3:/var/lib/kafka/data | ||
environment: | ||
KAFKA_NODE_ID: 3 | ||
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT | ||
KAFKA_ADVERTISED_LISTENERS: INTERNAL://:29092,EXTERNAL://${DOCKER_HOST_IP}:${KAFKA_3_PORT} | ||
KAFKA_LISTENERS: INTERNAL://:29092,CONTROLLER://kafka-3:29093,EXTERNAL://0.0.0.0:${KAFKA_3_PORT} | ||
KAFKA_PROCESS_ROLES: 'broker,controller' | ||
KAFKA_CONTROLLER_QUORUM_VOTERS: 1@kafka-1:29093,2@kafka-2:29093,3@kafka-3:29093 | ||
KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL | ||
KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER | ||
CLUSTER_ID: ${KAFKA_CLUSTER_ID} | ||
networks: | ||
- jpasample-network | ||
kafka-ui: | ||
image: provectuslabs/kafka-ui | ||
container_name: kafka-ui | ||
ports: | ||
- "${KAFKA_UI_PORT}:8080" | ||
restart: always | ||
environment: | ||
KAFKA_CLUSTERS_0_NAME: ${PROFILE:-local} | ||
KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka-1:29092,kafka-2:29092,kafka-3:29092 | ||
depends_on: | ||
- kafka-1 | ||
- kafka-2 | ||
- kafka-3 | ||
networks: | ||
- jpasample-network | ||
networks: | ||
jpasample-network: | ||
driver: bridge | ||
``` |