我将使用Ansible脚本来创建Kafka主题。我为要创建的主题定义了一个YAML Hash var:
topics:
topic1:
partitions: 1
replication_factor: 2
topic2:
partitions: 1
replication_factor: 2
在创建它们之前,我首先需要检查主题是否存在。我可以使用kafka-topics.sh --list --zookeeper localhost:2181
获取现有主题名称列表,然后与topics
哈希进行比较以获取要创建的主题列表,然后调用kafka-topics.sh --create --topic name
来创建主题。
如何实现这个?
答案 0 :(得分:1)
感谢linuxdynasty的回答。但我不想为这个简单的任务编写一个模块。最后我制定了以下解决方案。我在这里发帖给人们参考。
---
- name: Get existing topic list
become_user: root
become: yes
become_method: sudo
shell: /opt/kafka/bin/kafka-topics.sh --list --zookeeper localhost:2181
register: existings
- name: Print existing topic list
debug: msg="{{existings.stdout | regex_replace("\\n", " ")}}"
- name: Create topics
become_user: root
become: yes
become_method: sudo
shell: >
if [[ `echo "{{existings.stdout}}" | grep {{item.key}}` != {{item.key}} ]]; then
/opt/kafka/bin/kafka-topics.sh --create --zookeeper localhost:2181
--topic {{item.key}} --partitions {{item.value.partitions}}
--replication-factor {{item.value.replication_factor}};
fi
with_dict: "{{kafka_topics}}"
答案 1 :(得分:0)
您似乎需要创建一个kafka事实模块。该模块将被称为像这样的kafaka_topics_facts。该模块将返回主题,然后您可以创建不存在的主题。请阅读此Developing Ansible Modules