io.confluent.ksql.exception.KafkaTopicExistsException: при запуске ksql-server-start ksql-server.properties

Я работаю с ksql довольно давно. Кластер Kafka если из 3 узлов. Я тоже использовал udf, и все выглядит хорошо, пока я не остановлю серверы и не запустил их снова. При запуске сервера я вижу в журналах следующее:

[2019-04-03 11:29:54,381] ERROR Exception encountered running command: A Kafka topic with the name 'czxcorp-structured-data-enriched' already exists, with different partition/replica configuration than required. KSQL expects 4 partitions (topic has 9), and 1 replication factor (topic has 1).. Retrying in 5000 ms (io.confluent.ksql.util.RetryUtil:80)
[2019-04-03 11:29:54,381] ERROR Stack trace: io.confluent.ksql.exception.KafkaTopicExistsException: A Kafka topic with the name 'czxcorp-structured-data-enriched' already exists, with different partition/replica configuration than required. KSQL expects 4 partitions (topic has 9), and 1 replication factor (topic has 1).
        at io.confluent.ksql.services.TopicValidationUtil.validateTopicProperties(TopicValidationUtil.java:51)
        at io.confluent.ksql.services.TopicValidationUtil.validateTopicProperties(TopicValidationUtil.java:35)
        at io.confluent.ksql.services.KafkaTopicClientImpl.validateTopicProperties(KafkaTopicClientImpl.java:292)
        at io.confluent.ksql.services.KafkaTopicClientImpl.createTopic(KafkaTopicClientImpl.java:76)
        at io.confluent.ksql.planner.plan.KsqlStructuredDataOutputNode.createSinkTopic(KsqlStructuredDataOutputNode.java:244)
        at io.confluent.ksql.planner.plan.KsqlStructuredDataOutputNode.buildStream(KsqlStructuredDataOutputNode.java:146)
        at io.confluent.ksql.physical.PhysicalPlanBuilder.buildPhysicalPlan(PhysicalPlanBuilder.java:106)
        at io.confluent.ksql.QueryEngine.buildPhysicalPlan(QueryEngine.java:113)
        at io.confluent.ksql.KsqlEngine$EngineExecutor.execute(KsqlEngine.java:625)
        at io.confluent.ksql.KsqlEngine$EngineExecutor.access$800(KsqlEngine.java:577)
        at io.confluent.ksql.KsqlEngine.execute(KsqlEngine.java:247)
        at io.confluent.ksql.rest.server.computation.StatementExecutor.startQuery(StatementExecutor.java:277)
        at io.confluent.ksql.rest.server.computation.StatementExecutor.executeStatement(StatementExecutor.java:191)
        at io.confluent.ksql.rest.server.computation.StatementExecutor.handleStatementWithTerminatedQueries(StatementExecutor.java:167)
        at io.confluent.ksql.rest.server.computation.StatementExecutor.handleRestore(StatementExecutor.java:101)
        at io.confluent.ksql.rest.server.computation.CommandRunner.lambda$null$0(CommandRunner.java:139)
        at io.confluent.ksql.util.RetryUtil.retryWithBackoff(RetryUtil.java:63)
        at io.confluent.ksql.util.RetryUtil.retryWithBackoff(RetryUtil.java:36)
        at io.confluent.ksql.rest.server.computation.CommandRunner.lambda$processPriorCommands$1(CommandRunner.java:135)
        at java.util.ArrayList.forEach(ArrayList.java:1257)
        at io.confluent.ksql.rest.server.computation.CommandRunner.processPriorCommands(CommandRunner.java:134)
        at io.confluent.ksql.rest.server.KsqlRestApplication.buildApplication(KsqlRestApplication.java:414)
        at io.confluent.ksql.rest.server.KsqlServerMain.createExecutable(KsqlServerMain.java:80)
        at io.confluent.ksql.rest.server.KsqlServerMain.main(KsqlServerMain.java:42)
 (io.confluent.ksql.util.RetryUtil:84)

Хотя я остановил / завершил все запросы, в журнале печатаются все команды, которые я выполнил с самого начала для моего тестирования до данных, включая create, select, drop. Я вытащил .jar (UDF) из папки / ext, и сервер запустился, хотя в журнале печатается функция udf (я использую) недоступна.

Это мой ksql-server.properties:

bootstrap.servers=hostname:9092
service.id=cyan_ksql
commit.interval.ms=5000
cache.max.bytes.buffering=20000000
num.stream.threads=10
fail.on.deserialization.error=false
listeners=http://localhost:8088
ksql.extension.dir=/opt/ksql-master/ext/

Сходит с ума с ошибкой. Удаляю тему и как-то ее воссоздаю. Кто-нибудь, пожалуйста, помогите.


person srikanth    schedule 03.04.2019    source источник


Ответы (1)


Проверьте ошибку:

A Kafka topic with the name 'czxcorp-structured-data-enriched' already exists, with different partition/replica configuration than required. 
KSQL expects 4 partitions (topic has 9), and 1 replication factor (topic has 1)

Если вы удалили тему, то либо

  • это на самом деле не было удалено
  • он был удален, а что-то еще воссоздало его с девятью разделами, и ваш ошибочный запрос KSQL не указал переопределение (WITH (PARTITIONS=9) на четыре по умолчанию
  • другая команда KSQL создает его перед той, которая выдает ошибку, и в вашем ошибочном запросе KSQL не указано переопределение (WITH (PARTITIONS=9) на четыре по умолчанию

Если вы хотите изменить свое состояние и начать с нуля, просто измените свой ksql.service.id, что заставит KSQL использовать новую тему команды (которая воспроизводится при перезапуске процесса)

person Robin Moffatt    schedule 03.04.2019
comment
Красивый. Работает с изменением в ksql.service.id. Спасибо, Робин. Я обновил вопрос, не могли бы вы предложить исправления в ksql-server.properties? Спасибо - person srikanth; 03.04.2019
comment
Вы можете изменить service.id в файле свойств - вы это имеете в виду? Не уверен, что вы спрашиваете - person Robin Moffatt; 04.04.2019
comment
Что ж, у меня изменился service.id, и сервер ksql запустился заново. Совершенно никаких проблем. Мой вопрос касается каких-либо изменений / дополнительных параметров, необходимых, кроме упомянутых в исходном вопросе для повышения производительности? - person srikanth; 05.04.2019
comment
Я бы порекомендовал начать новый вопрос и подробно описать проблемы с производительностью, с которыми вы сталкиваетесь, и которые вы хотите решить. Благодарю. - person Robin Moffatt; 05.04.2019