์ด repo์ 5.4.1-post ๋ถ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ํฉ๋ฅ Kafka์ ์ฌ์ก์ฌ๋ฅผ ์ค์นํ๋ ค๊ณ ํฉ๋๋ค.
confluent.variables_handlers๋ฅผ confluent.zookeeper ๋ฐ confluent.kafka ์ญํ ์์ ์ข
์ ์ญํ ๋ก ์ฌ์ฉํ๋ ๋ชฉ์ ์ ๋ฌด์์
๋๊น? ์ด ๋ฌด์ confluent.zookeeper / ๊ธฐ๋ณธ๊ฐ / main.yaml์์ ์ฌ์ก์ฌ ๋ณ์ ์ ์ฌ kafka_broker์์ confluent.kafka /defaults/main.yaml. kafka๋ฅผ ์ค์นํ ๋ ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
TASK [confluent.kafka_broker : Set Permissions on Data Dirs] ********
FAILED! => {"msg": "'dict object' has no attribute 'datadir'"}
์ค์ ๋ก ์ฌ์ ์ ๋ณํฉํด์ผ ํฉ๋๋ค. cp-ansible์ ์คํํ ๋ ํ์ฌ ๋๋ ํ ๋ฆฌ๊ฐ cp-ansible ์์ฒด์ ๋ฃจํธ์ธ์ง ํ์ธํ์ญ์์ค. ์ด๋ ๊ฒ ํ๋ฉด hash_behaviour=merge
sible.cfg ํ์ผ ์ ์ป์ ์ ์์ต๋๋ค.
๋ณ์์ ์์น๊ฐ ํผ๋์ค๋ฝ๋ค๋ ์ ์ ์ธ์ ํฉ๋๋ค. ์๊ฐ์ด ์์ ๋ ๊ฐ์ ํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
๋๋ ๊ทธ๊ฒ์ ์๋ํ๋ค. ์ด์ ๋์ผํ ํ๋ ์ด๋ถ์ ์คํํ๋ฉด
TASK [confluent.kafka_broker : Set Permissions on Data Dirs] ******
{"msg": "'dict object' has no attribute 'kafka_broker'"}
ํ ์ด์ํฉ๋๋ค. ๋ค์์ ์ ๊ณตํ ์ ์์ต๋๊น?
git status
git branch
cat hosts.yml
๋๋ ์ธ๋ฒคํ ๋ฆฌ ํ์ผ์ ์ด๋ฆ์ด ๋ฌด์์ด๋
์. ๋๋์ด hosts.yml๊ณผ ํจ๊ป ์ผํ๊ฒํ๋ค.
all:
vars:
ssl_enabled: false
ssl_mutual_auth_enabled: false
sasl_protocol: none
kafka_broker_configure_additional_brokers: false
kafka_broker:
vars:
kafka_broker:
datadir:
- /var/lib/kafka/my-data
hosts:
172.XX.YY.20:
172.XX.YY.18:
172.XX.YY.19:
์ด์ ์์ ๋์ ์ธ๋ฒคํ ๋ฆฌ์์ ๊ทธ๋ฃน ๋ณ์์ ์ผ๋ถ๋ก kafka_broker ๋ฅผ ์ถ๊ฐ
์ผ ์์๊ฒผ์ด! ๋์ ์ธ๋ฒคํ ๋ฆฌ๋ฅผ ์๋ํ์ง๋ ์์์ง๋ง hash_merging์ด ํ์ฑํ๋์ด ์๋ ํ cp-ansible์ด ์๋ํด์ผ ํฉ๋๋ค!
๋ ๋ค๋ฅธ ์ฌํญ - IP ์ฃผ์๋ฅผ ์ฌ์ฉํ ํธ์คํธ ์ด๋ฆ ์ ํจ์ฑ ๊ฒ์ฌ์ ๋ฌธ์ ๊ฐ ์์ผ๋ฏ๋ก ์ํธํ๋ฅผ ์ผ๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ๊ณ ์๋ค๋ฉด ์๋ง๋ ํธ์คํธ ์ด๋ฆ์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
์ธ๋ฒคํ ๋ฆฌ์์ Kafka VM์ kafka_hosts๋ก ๊ทธ๋ฃนํํ์ผ๋ฏ๋ก all.yaml์์ ํธ์คํธ ๊ฐ์ ๋ณ๊ฒฝํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- name: Kafka Broker Provisioning
# hosts: kafka_broker
hosts: kafka_hosts
์ด์ ๊ฐ์ด ์ธ๋ฒคํ ๋ฆฌ ๋๋ ํ ๋ฆฌ ์๋์ ๊ทธ๋ฃน ๋ณ์๋ฅผ ์ ์ํ์ต๋๋ค.
# File kafka_hosts.yaml
---
ssl_enabled: false
ssl_mutual_auth_enabled: false
sasl_protocol: none
kafka_broker_configure_additional_brokers: false
confluent_server_enabled: false
kafka_broker_service_environment_overrides:
KAFKA_HEAP_OPTS: "-Xms1g -Xmx1g -XX:MetaspaceSize=96m -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M -XX:MinMetaspaceFreeRatio=50 -XX:MaxMetaspaceFreeRatio=80"
kafka_broker:
datadir:
- /var/lib/kafka/
auto.create.topics.enable: true
properties:
num.partitions: 20
log.flush.interval.messages: 10000
log.flush.interval.ms: 1000
zookeeper.connection.timeout.ms: 6000
offsets.topic.replication.factor: 2
min.insync.replicas: 2
default.replication.factor: 3
์ด๊ฒ์ kafka_broker์ ๊ฐ์ ๋งต์ ์ ์ธํ ๋ชจ๋ ๋ณ์๋ฅผ ์กด์คํฉ๋๋ค. ๊ทธ๊ฒ์ ๋์๊ฒ ์ค๋ฅ๋ฅผ ์ค๋ค
FAILED! => {"msg": "'dict object' has no attribute 'kafka_broker'"}
๊ทธ๋ฃน ์ด๋ฆ์ ํญ์ kafka_broker ๋ก ์ง์ ํด์ผ ํฉ๋๊น?
์ฃ์กํฉ๋๋ค, ์ ๋ asible์ ๋ํ ์ด๋ณด์์ ๋๋ค. ์ด์ฉ๋ฉด ๋๋ ๋ช ๊ฐ์ง ๊ธฐ๋ณธ ์ฌํญ์ ๋์น๊ณ ์์ต๋๋ค.
@sandeeprapido ์์ ๋์ผํ ์์ ์ ์ํํ์ต๋๋ค. ์ด ์์ ์ ์ํํ๋ ค๋ฉด ํธ์คํธ์ ์ด๋ฆ์ kafka_broker๋ก ์ง์ ํด์ผ ํฉ๋๋ค.
์์ง ๋์์ด ํ์ํ์ญ๋๊น?
์ฝ๋์ ๋๋ฒ๊ทธ ์์ ์ ์ถ๊ฐํ์ฌ vars๊ฐ ๋ฌด์์ผ๋ก ์ค์ ๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค. ๋๋ ์ด๊ฒ์ ์ด๋๊ฐ์ ์ถ๊ฐ ํ ๊ฒ์ด๋ค
- debug: var=kafka_broker
๋ํ hash_merging์ด ansible.cfg์ ํจ๊ป ์ฌ์ฉ๋๊ณ ์๋์ง ํ์ธํ์ญ์์ค.
ํธ์คํธ ๊ทธ๋ฃน์ ์ด๋ฆ์ kafka_broker์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ์ง์ ํด์ผ ํ์ต๋๋ค. ๊ทธ๋์ ํ๋ ์ด๋ถ์ ์์ ํ์ต๋๋ค. ํธ์คํธ ๊ทธ๋ฃน ์ด๋ฆ์ ๋ณด์ ํ๋ kafka_broker_host_group
๋ณ์๋ฅผ ์ถ๊ฐํ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ด ์ญํ ํ์ผ์ ๋ณ๊ฒฝํ์ต๋๋ค.
bootstrap.servers={% for host in groups['kafka_broker'] %}
์ด bootstrap.servers={% for host in groups[kafka_broker_host_group]
๋ณ๊ฒฝํ์ต๋๋ค. ์ด๊ฒ์ ๋ด๊ฐ ์ฌ์ฉ์ ์ง์ ๊ทธ๋ฃน ์ด๋ฆ์ ๊ฐ๋ ๋ฐ ๋์์ด ๋์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์, hash_behaviour๋ฅผ ๋ณํฉ์ผ๋ก ์ค์ ํ๋ฉด ์ด ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ ์๋ ๋ฒ๊ทธ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋์์ต๋๋ค.
๋์ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค :)
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ค์ ๋ก ์ฌ์ ์ ๋ณํฉํด์ผ ํฉ๋๋ค. cp-ansible์ ์คํํ ๋ ํ์ฌ ๋๋ ํ ๋ฆฌ๊ฐ cp-ansible ์์ฒด์ ๋ฃจํธ์ธ์ง ํ์ธํ์ญ์์ค. ์ด๋ ๊ฒ ํ๋ฉด
hash_behaviour=merge
sible.cfg ํ์ผ ์ ์ป์ ์ ์์ต๋๋ค.๋ณ์์ ์์น๊ฐ ํผ๋์ค๋ฝ๋ค๋ ์ ์ ์ธ์ ํฉ๋๋ค. ์๊ฐ์ด ์์ ๋ ๊ฐ์ ํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.