카프카 설정 / 리스너 / listener config / configuration / 리스너 설정
kafka listner 가 network 외부에 존재하는 경우, kafka 의 설정
kafka client 의 시작시 동작
kafka client 는 kafka 에 대한 설정값을 가지고 있다. 그래서 어느 host/port 에 request 를 할 지 알고 있다.
kafka client 는 시작할 때, 어떤 broker 가 그 partition 의 leader 인지를 알려달라는 metadata 를 요청한다. 이것에 대한 대답은 아무 broker 에서 가능하다.
return되는 metadata 는 그 partition 의 Leader broker 의 위치를 알려준다. 그러면 client 는 broker 에 연결해서 data 를 read/write 하기위해 그 endpoint 들을 이용하게 된다.
listeners
는 kafka 가 어디에 bind 할 것인지를 알려주는 설정값이라 보면 되고,advertised.listeners
는 외부 kafka client 가 어떻게 broker 에 연결될 수 있는지를 알려주는 값이라고 보면 된다.inter.broker.listener.name
은 kafka broker들이 broker들끼리 통신할 때 어떤 broker 를 사용할지를 정해주는 값이다.
내부, 외부에서 같은 이름으로 접근할 수 있다면
만약 내부에서도, 외부에서도 같은 host 로 접근이 가능한 상태라면,
아래처럼 설정을 할 수 있다. 아래를 보면 대충 알 수 있겠지만,
PLAINTEXT
는 protocol 이 아니라 listener name
이다.
이
글을 보면, PLAINTEXT
는 secure protocol 중에 그냥
아무런 encrypt 도 안하고 보내는 protocol 을 이야기 한다고 한다.
- https://github.com/apache/kafka/blob/trunk/config/kraft/broker.properties#L32
listeners = listener_name://host_name:port
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://mylocalexternal.mine.com:9092
inter.broker.listener.name=PLAINTEXT
만약 외부, 내부에서 접근할 수 있는 host 가 다르다면
만약 외부에서 접근할 수 있는 host(또는 ip address) 가 내부에서 접근할 수 있는 host/ip 와 다르다면, 당연한 이야기겠지만, 양쪽을 다 적어줘야 한다. 그래서 다음처럼 내부(internal), 외부(external) 에 대한 설정을 해줘야 한다.
listeners=INTERNAL://0.0.0.0:19092,EXTERNAL://0.0.0.0:9092
listener.security.protocol.map=INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT
advertised.listeners=INTERNAL://mylocal.com:19092,EXTERNAL://myexternal.mine.com:9092
inter.broker.listener.name=INTERNAL
advertised.listeners
: kafka client 가 내부(INTERNAL) 에서는mylocal.com:19092
에 접속하고, 외부(EXTERNAL) 에서는myexternal.mine.com:9092
에 접속을 시도하게 된다.- listeners : kafka 는 다음 2개의 listener 를 만든다.
- 내부:
INTERNAL://0.0.0.0:19092
- 외부:
EXTERNAL://0.0.0.0:9092
- 내부:
참고: Kafka Listeners :: Kafka Tutorial : 링크의 그림참고
docker compose.yml
- 쿠…sal:
[컴] kafka-ui, kafka topic 보는 client : 여기에 kafka 를 띄우는
componse.yml
가 있다. - kafka listner 가 network 외부에 존재하는 경우, kafka 의 설정
- Kafka Listeners :: Kafka Tutorial : 이미지 참고
- Configuration | bitnami/kafka
- Kafka access inside and outside docker - Stack Overflow
- Connect to Apache Kafka Running in Docker | Baeldung
# compose.yml
version: '3'
# https://hub.docker.com/r/bitnami/kafka
# --> Apache Kafka development setup example
networks:
app-tier:
driver: bridge
services:
zookeeper:
image: 'bitnami/zookeeper:latest'
ports:
- '2181:2181'
environment:
- ALLOW_ANONYMOUS_LOGIN=yes
networks:
- app-tier
kafka:
# https://hub.docker.com/r/bitnami/kafka
image: 'bitnami/kafka:latest'
# hostname: kafkah0
container_name: kafka0
ports:
- '9092:9092'
environment:
- KAFKA_BROKER_ID=1
- KAFKA_CFG_LISTENERS=INTERNAL://:9094,OUTSIDE://:9092
- KAFKA_CFG_ADVERTISED_LISTENERS=INTERNAL://kafka0:9094,OUTSIDE://127.0.0.1:9092
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=INTERNAL:PLAINTEXT,OUTSIDE:PLAINTEXT
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=INTERNAL
- KAFKA_CFG_ZOOKEEPER_CONNECT=zookeeper:2181
- ALLOW_PLAINTEXT_LISTENER=yes
depends_on:
- zookeeper
networks:
- app-tier
kafka-ui:
image: provectuslabs/kafka-ui
container_name: kafka-ui-0
ports:
- "8980:8080"
# restart: always
environment:
- KAFKA_CLUSTERS_0_NAME=local
# connect using INTERNAL
- KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS=kafka0:9094
- KAFKA_CLUSTERS_0_READONLY=true
depends_on:
- kafka
networks:
- app-tier
댓글 없음:
댓글 쓰기