【问题标题】:Kafka Multi broker setup with ec2 machine: Timed out waiting for a node assignment. Call: createTopics使用 ec2 机器设置 Kafka 多代理:等待节点分配超时。调用:createTopics
【发布时间】:2021-12-18 14:09:41
【问题描述】:

我正在尝试在 AWS EC2 实例中设置具有 3 个代理节点和 1 个 Zookeeper 节点的 kafka。我对每个代理都有以下 server.properties

卡夫卡-1:

broker.id=0
listeners=PLAINTEXT_1://ec2-**-***-**-17.eu-central-1.compute.amazonaws.com:9092
advertised.listeners=PLAINTEXT_1://ec2-**-***-**-17.eu-central-1.compute.amazonaws.com:9092
listener.security.protocol.map=,PLAINTEXT_1:PLAINTEXT
inter.broker.listener.name=PLAINTEXT_1
zookeeper.connect=ec2-**-***-**-105.eu-central-1.compute.amazonaws.com:2181

卡夫卡-2:

broker.id=1
listeners=PLAINTEXT_2://ec2-**-***-**-43.eu-central-1.compute.amazonaws.com:9093
advertised.listeners=PLAINTEXT_2://ec2-**-***-**-43.eu-central-1.compute.amazonaws.com:9093
listener.security.protocol.map=,PLAINTEXT_2:PLAINTEXT
inter.broker.listener.name=PLAINTEXT_2
zookeeper.connect=ec2-**-***-**-105.eu-central-1.compute.amazonaws.com:2181

kafka-3:

broker.id=2
listeners=PLAINTEXT_3://ec2-**-***-**-27.eu-central-1.compute.amazonaws.com:9094
advertised.listeners=PLAINTEXT_3://ec2-**-***-**-27.eu-central-1.compute.amazonaws.com:9094
listener.security.protocol.map=,PLAINTEXT_3:PLAINTEXT
inter.broker.listener.name=PLAINTEXT_3
zookeeper.connect=ec2-**-***-**-105.eu-central-1.compute.amazonaws.com:2181

动物园管理员:

tickTime=2000
dataDir=/var/lib/zookeeper
clientPort=2181

当我在 zookeeper 中运行以下命令时,我看到它们已连接

我还通过代理端口从任何代理远程登录到其他代理,它们都已连接

但是,当我尝试使用 2 个复制因子创建主题时,我得到 等待节点分配超时

我无法理解我的设置有什么问题,我看到 Zookeeper 中运行了 3 个节点,但在创建主题时出现问题。顺便说一句,当我将复制因子设为 1 时,我得到了同样的错误。如何确保我的集群一切正常?

【问题讨论】:

  • 1) 为什么不使用 MSK? 2)如果您的侦听器设置为PLAINTEXT://:9092PLAINTEXT://0.0.0.0:9092(您不需要不同实例上的不同端口),它是否有效
  • 您也不需要在每个代理上使用不同的侦听器名称/映射...
  • 1) 检查定价在我的情况下很重要 2) 当我固定侦听器映射名称时,它是固定的。谢谢!
  • 将入口/出口 VPC 流量、EBS 磁盘存储和 EC2 成本加起来后,定价几乎完全相同

标签: amazon-web-services amazon-ec2 apache-kafka apache-zookeeper


【解决方案1】:

telnet 检查端口是否打开很好,但它不能验证 Kafka 协议是否有效。您可以为此使用 kcat 实用程序,但修复包括

  1. 对于每个代理,listeners 设置为 PLAINTEXT://:9092PLAINTEXT://0.0.0.0:9092,这意味着使用相同的端口
  2. 从侦听器映射和通告的侦听器属性中删除数字,以便每个代理都相同

我还建议您考虑使用 Ansible/Terraform/Cloudformation 来确保您始终如一地修改集群,而不是手动编辑单个设置

【讨论】:

    猜你喜欢
    • 2018-12-21
    • 2019-05-04
    • 1970-01-01
    • 2022-08-11
    • 1970-01-01
    • 2018-10-10
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    相关资源
    最近更新 更多