ksqlDB 服务器在配置、偏移量和状态主题更改时关闭

问题描述

我在 Kubernetes 集群上运行一个 ksqlDB 服务器 on embedded mode,我想添加一个连接器。

添加连接器会产生 Request timed out on Kafka Connect exactly similar to this blog post by Robin Moffatt.

因此他建议更改他的 docker-compose 示例中包含的 KAFKA_OFFSET_REPLICATION_FACTOR

但不幸的是,在我们的测试环境中,我无法轻松访问现有的 Kafka 集群(我们在那里有管理员),所以我认为最快的方法是更改​​:

  • Ksql_CONNECT_CONfig_STORAGE_TOPIC - 更改为不同的主题名称
  • Ksql_CONNECT_OFFSET_STORAGE_TOPIC
  • Ksql_CONNECT_STATUS_STORAGE_TOPIC
  • Ksql_CONNECT_CONfig_STORAGE_REPLICATION_FACTOR-1(最初这个值为 1)
  • Ksql_CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR-1(最初这个值为 1)
  • Ksql_CONNECT_STATUS_STORAGE_REPLICATION_FACTOR-1(最初这个值为 1)

但是当我更改主题名称时,我可以看到创建了新主题(使用 ksqlDB 的 SHOW TOPICS 命令),但它总是关闭并永远重新启动,以下是日志:

[2021-07-22 01:27:19,889] INFO ProcessingLogConfig values:
ksql.logging.processing.rows.include = false
ksql.logging.processing.stream.auto.create = false
ksql.logging.processing.stream.name = Ksql_PROCESSING_LOG
ksql.logging.processing.topic.auto.create = false
ksql.logging.processing.topic.name =
ksql.logging.processing.topic.partitions = 1
ksql.logging.processing.topic.replication.factor = 1


(io.confluent.ksql.logging.processing.ProcessingLogConfig:372)
[2021-07-22 01:27:19,891] ERROR Aborting application start (io.confluent.ksql.rest.server.KsqlRestApplication:378)
io.confluent.ksql.rest.server.KsqlRestApplication$AbortApplicationStartException: Shutting down application during waitForPreconditions
    at io.confluent.ksql.rest.server.KsqlRestApplication.waitForPreconditions(KsqlRestApplication.java:441)
    at io.confluent.ksql.rest.server.KsqlRestApplication.startKsql(KsqlRestApplication.java:386)
    at io.confluent.ksql.rest.server.KsqlRestApplication.startAsync(KsqlRestApplication.java:370)
    at io.confluent.ksql.rest.server.MultiExecutable.doAction(MultiExecutable.java:68)
    at io.confluent.ksql.rest.server.MultiExecutable.startAsync(MultiExecutable.java:42)
    at io.confluent.ksql.rest.server.KsqlServerMain.tryStartApp(KsqlServerMain.java:89)
    at io.confluent.ksql.rest.server.KsqlServerMain.main(KsqlServerMain.java:64)
[2021-07-22 01:27:19,892] INFO Server up and running (io.confluent.ksql.rest.server.KsqlServerMain:90)
[2021-07-22 01:27:19,892] INFO Server shutting down (io.confluent.ksql.rest.server.KsqlServerMain:96)
[2021-07-22 01:27:19,892] INFO ksqlDB shutdown called (io.confluent.ksql.rest.server.KsqlRestApplication:498)
[2021-07-22 01:27:34,926] INFO API server stopped (io.confluent.ksql.api.server.Server:196)
[2021-07-22 01:27:34,927] INFO ksqlDB shutdown complete (io.confluent.ksql.rest.server.KsqlRestApplication:553)

我没有更多细节,仅此而已。

当我将配置、偏移量和状态主题名称返回到我最初拥有的名称时,ksqlDB 服务器启动正常,但我再次遇到无法创建连接器的问题。

我担心当我尝试手动删除主题时,ksqlDB 服务器将无法正常启动,因为它一直在寻找我最初拥有的原始配置、偏移量和状态主题

解决方法

我已经解决了这个问题,显然使用 -1 作为值:

  • KSQL_CONNECT_CONFIG_REPLICATION_FACTOR
  • KSQL_CONNECT_OFFSET_REPLICATION_FACTOR
  • KSQL_CONNECT_STATUS_REPLICATION_FACTOR

运行不正常,Config topic变成20个分区,

当我在 Confluent Docs 中读到它应该只有 1 个分区时,我认为这就是 ksqlDB Server 无限重启的原因,我只需要收集正确的证据。

将这些值转换为 3(这是我们 Kafka 经纪人的默认代表因子配置)我认为解决了这个问题,这很难,因为没有看到错误消息,就像它不想要更多超过创建的配置主题的 1 个分区。