Estou tentando instalar o Kafka confluente e o zookeeper usando o branch post 5.4.1 deste repositório.
Qual é o propósito de usar confluent.variables_handlers como uma função dependente nas funções confluent.zookeeper e confluent.kafka. Isso substitui a variável zookeeper em confluent.zookeeper / defaults / main.yaml, da mesma forma kafka_broker em confluent.kafka /defaults/main.yaml. Recebo este erro quando instalo o kafka.
TASK [confluent.kafka_broker : Set Permissions on Data Dirs] ********
FAILED! => {"msg": "'dict object' has no attribute 'datadir'"}
Na verdade, ele deve mesclar os dicionários, certifique-se de que seu diretório atual ao executar cp-ansible seja a raiz do próprio cp-ansible. Isso lhe dará o arquivo ansible.cfg com hash_behaviour=merge
Admito que a localização das variáveis é confusa e espero melhorá-la quando tiver tempo
Eu tentei isso. Agora, quando executo o mesmo manual, recebo
TASK [confluent.kafka_broker : Set Permissions on Data Dirs] ******
{"msg": "'dict object' has no attribute 'kafka_broker'"}
Hmm estranho, você pode fornecer:
git status
git branch
cat hosts.yml
ou qualquer que seja o nome do seu arquivo de inventário
Nós vamos. Consegui trabalhar com este 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:
Antes disso, adicionei kafka_broker como parte do grupo vars no inventário dinâmico. De alguma forma, não estava funcionando. Estou verificando isso. Obrigado pela ajuda imediata.
Sim, isso parece bom! Eu não experimentei inventários dinâmicos, mas enquanto o hash_merging estiver habilitado, o cp-ansible deve funcionar!
Outra coisa - tive problemas com a validação de nome de host usando endereços IP, então se você está indo na direção de ativar a criptografia, provavelmente usaria nomes de host
Agrupei minhas VMs Kafka como kafka_hosts em meu inventário, portanto, alterar os valores de hosts em all.yaml se parece com isso.
- name: Kafka Broker Provisioning
# hosts: kafka_broker
hosts: kafka_hosts
e variáveis de grupo definidas no diretório de inventário como este.
# 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
Isso respeita todas as variáveis, exceto mapas como kafka_broker. Me dá o erro
FAILED! => {"msg": "'dict object' has no attribute 'kafka_broker'"}
Devo sempre nomear o grupo como kafka_broker ?
Desculpe, sou um novato no ansible. Talvez eu esteja faltando alguns princípios básicos.
Passou pela mesma coisa aqui - @sandeeprapido - você precisa definir o namespace de seus hosts para kafka_broker para que isso funcione.
Você ainda precisa de ajuda nisso?
Você pode adicionar tarefas de depuração no código para ver como seus vars estão configurados. Eu adicionaria isso em algum lugar
- debug: var=kafka_broker
Verifique também se o hash_merging está sendo usado com o ansible.cfg
Eu precisava nomear o grupo de host como algo diferente de kafka_broker. Então, fiz uma mudança no manual. Eu adicionei uma variável kafka_broker_host_group
que contém o nome do grupo de hosts.
E fez alterações nos arquivos de funções como abaixo.
bootstrap.servers={% for host in groups['kafka_broker'] %}
mudou para bootstrap.servers={% for host in groups[kafka_broker_host_group]
. Isso me ajudou a ter nomes de grupo personalizados.
E sim, definir hash_behaviour como merge me ajudou a resolver o bug original para o qual abri esse problema.
Obrigado pela ajuda :)
Comentários muito úteis
Na verdade, ele deve mesclar os dicionários, certifique-se de que seu diretório atual ao executar cp-ansible seja a raiz do próprio cp-ansible. Isso lhe dará o arquivo ansible.cfg com
hash_behaviour=merge
Admito que a localização das variáveis é confusa e espero melhorá-la quando tiver tempo