我在GKE上运行了一个2节点的KSQLDB0.26集群。两者都可以独立运行,但它们并没有为高可用性而正确地设置,我也不知道为什么。当我试图从/clusterStatus端点获取内省集群状态时,hostAlive值始终是其中一个服务器的false。这是在运行SELECT * FROM X AS SELECT查询时发生的。当我试图提取查询时,我得到了以下输出:
{"@type":"statement_error","error_code":40001,“message”:“启动拉查询错误:无法执行拉查询”。[分区0未能找到有效主机。主机扫描:没有选择ksqldb-2:8099,因为主机在1656932189568时未存活,主机不存在滞后信息。由于主机不存在滞后信息,所以没有选择ksqldb-1:8099。分区1未能找到有效的主机。主机扫描:由于主机不存在延迟信息,所以没有选择ksqldb-1:8099。由于主机在1656932189568时已不存在,所以没有选择ksqldb-2:8099,主机不存在滞后信息。分区2找不到有效的主机。主机扫描:没有选择ksqldb-2:8099,因为主机在1656932189568时未存活,主机不存在滞后信息。由于主机不存在滞后信息,所以没有选择ksqldb-1:8099。分区3未能找到有效的主机。主机扫描:由于主机不存在延迟信息,所以没有选择ksqldb-1:8099。由于主机在1656932189568时已不存在,所以没有选择ksqldb-2:8099,主机不存在滞后信息。分区4未能找到有效的主机。主机扫描:没有选择ksqldb-2:8099,因为主机在1656932189568时未存活,主机不存在滞后信息。由于主机不存在滞后信息,所以没有选择ksqldb-1:8099。分区5未能找到有效的主机。主机扫描:没有选择ksqldb-1:8099,因为主机不存在滞后信息。由于主机在1656932189568时未存活,所以没有选择ksqldb-2:8099,主机不存在滞后信息。分区6未能找到有效的主机。主机扫描:没有选择ksqldb-2:8099,因为主机在1656932189568时未存活,主机不存在滞后信息。由于主机不存在滞后信息,所以没有选择ksqldb-1:8099。分区7未能找到有效的主机。主机扫描:没有选择ksqldb-1:8099,因为主机不存在滞后信息。由于主机在1656932189568时未存活,所以没有选择ksqldb-2:8099,主机不存在滞后信息。分区8未能找到有效的主机。主机扫描:没有选择ksqldb-2:8099,因为主机在1656932189568时未存活,主机不存在滞后信息。由于主机不存在滞后信息,所以没有选择ksqldb-1:8099。分区9未能找到有效的主机。主机扫描:没有选择ksqldb-1:8099,因为主机不存在滞后信息。由于主机在1656932189568时未存活,所以没有选择ksqldb-2:8099,主机不存在滞后信息。分区10找不到有效的主机。主机扫描:没有选择ksqldb-2:8099,因为主机在1656932189568时未存活,主机不存在滞后信息。由于主机不存在滞后信息,所以没有选择ksqldb-1:8099。分区11未能找到有效的主机。主机扫描:没有选择ksqldb-1:8099,因为主机不存在滞后信息。由于主机在1656932189568时已不活动,因此没有选择ksqldb-2:8099,主机不存在滞后信息。]\n状态:从DOMAIN_TIER_TABLE选择*;“statementText”:“选择*从DOMAIN_TIER_TABLE;",”实体“:[]}
我在KSQL上使用带有UDF加载和的Docker映像。我认为这些是我的kubernetes部署清单中的相关KSQL env vars:
- name: KSQL_LISTENERS
value: http://0.0.0.0:8089
- name: KSQL_KSQL_INTERNAL_LISTENER
value: "http://0.0.0.0:8099"
- name: KSQL_KSQL_ADVERTISED_LISTENER
value: "http://ksqldb-1:8099"
- name: KSQL_KSQL_STREAMS_NUM_STANDBY_REPLICAS
value: "1"
- name: KSQL_KSQL_QUERY_PULL_ENABLE_STANDBY_READS
value: "true"
- name: KSQL_KSQL_HEARTBEAT_ENABLE
value: "true"
- name: KSQL_KSQL_LAG_REPORTING_ENABLE
value: "true"这是给一个服务器的。另一个将使用ksqldb-2作为主机名。这将解析为一个IP地址,我通过在豆荚上获得一个shell并通过printenv检查这些变量是否被传递来确认这个IP地址。一切看起来都是这样。我为每个服务器都提供了一项服务。我有一种感觉,我错误地设置了我的侦听器,但是我尝试了很多不同的侦听器迭代。
我不习惯问关于堆叠溢出的问题,所以我不太确定还能提供什么,但我可以提供任何所需的!谢谢!
发布于 2022-07-25 11:26:57
对于任何感兴趣的人来说,使用HTTP保护KSQL会导致拉查询中断的高可用性。这是因为发送给HA启用的心跳返回401。目前,我还没有看到通过这些心跳传递身份验证细节的方法。
如果您可以利用NGINX入口控制器来传递oauth凭据,那可能是最好的方法。然而,在我们的例子中,KSQL和NGINX之间的最后一次跳转不支持HTTP/2,这对于我们需要的Streams API中的某些作用域是必需的。
https://stackoverflow.com/questions/72858299
复制相似问题