我正在尝试使用此 repo 的 5.4.1-post 分支安装融合的 Kafka 和 zookeeper。
在 confluent.zookeeper 和 confluent.kafka 角色中使用 confluent.variables_handlers 作为依赖角色的目的是什么。 这会覆盖 confluent.zookeeper/defaults/main.yaml 中的zookeeper变量,类似于 confluent.kafka /defaults/main.yaml 中的kafka_broker 。 安装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
的ansible.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吗?
抱歉,我是 ansible 的新手。 也许我缺少一些基础知识。
刚刚在这里经历了同样的事情 - @sandeeprapido - 你确实需要将你的主机命名为 kafka_broker 才能工作。
您还需要这方面的帮助吗?
您可以在代码中添加调试任务以查看您的变量设置为什么。 我会在某处添加这个
- 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 设置为 merge 帮助我解决了我打开此问题的原始错误。
谢谢您的帮助 :)
最有用的评论
它实际上应该合并字典,确保在运行 cp-ansible 时您的当前目录是 cp-ansible 本身的根目录。 这将使您获得带有
hash_behaviour=merge
的ansible.cfg 文件我承认,变量的位置很混乱,希望有时间改进一下