Как сбросить таблицу или поток в KSQL, когда тема была удалена первой

Используя KSQL (Confluent: Версия: 5.0.1), я могу нормально удалить таблицу / поток (используя DROP [TABLE|STREAM]) <NAME>, когда связанная тема существует и когда она зарегистрирована (Registered = true).

Однако, если тема удаляется первой (Registered = false), то связанный поток или таблица не могут быть отброшены с указанием KSQL, что «Тема с именем Foo не зарегистрирована».

Проблема в том, что поток / таблица все еще отображается в списке, и нельзя добавить новый поток / таблицу с тем же именем.

Есть ли способ их удалить после того, как тему сбросили?

Построение конвейеров данных в реальном времени с Apache Kafka: Руководство по Python
Построение конвейеров данных в реальном времени с Apache Kafka: Руководство по Python
Apache Kafka - популярная платформа распределенной потоковой передачи данных, которую можно использовать для построения конвейеров данных в реальном...
0
0
4 626
4

Ответы 4

Некоторое время я боролся с проблемами этого типа. Вот где я, из своих заметок:

Возникли проблемы с удалением потоков / таблиц / тем? Удалите их в zookeeper:

  • Отключите всех производителей или потребителей, связанных с темами, которые вы удаляете.
  • Попытка удалить ваши таблицы и потоки из KSQL CLI
  • Выключите сервер KSQL
  • Удаление тем с помощью интерфейса командной строки 'kafka-topic'
  • Удалите в zookeeper вот так:

    zookeeper-shell localhost: 2181

    ls / брокеры / темы

    _confluent-controlcenter-5-0-0-1-TriggerEventsStore-changelog, _confluent-controlcenter-5-0-0-1-error-topic, ...

    rmr / брокеры / темы / yourTopicName

Теперь выполните "kafka-themes --list --zookeeper localhost: 2181 ', и они исчезнут навсегда.

ИЛИ, для АБСОЛЮТНОГО ЯДЕРНОГО ВАРИАНТА:

  • Попытка удалить ваши таблицы и потоки из KSQL CLI
  • Выключите сервер KSQL
  • Закройте своих брокеров и зоопарков
  • Удалите все, что находится в каталоге журналов kafka на каждом узле брокера (расположение каталога определяется в вашем файле свойств).
  • Снова запустите zookeepers и удалите / brokers / themes из интерфейса командной строки zookeeper.

Запустите все резервное копирование, и все должно исчезнуть. Но будь осторожен, ты проиграешь все, все ваши данные.

Темы можно удалять с помощью интерфейса командной строки kafka-themes - проблема не в этом. Это таблицы и потоки, которые все еще зарегистрированы и не могут быть удалены после удаления темы (Зарегистрировано = false). ЯДЕРНЫЙ ВАРИАНТ - должен быть лучший способ удалить некоторые мертвые потоки / таблицы

Matthias 12.12.2018 21:15

Итак, когда вы удаляете резервную копию из zookeeper, они все еще существуют для вас в виде потоков и таблиц в KSQL?

medloh 13.12.2018 17:38

Спасибо medloh за ваши комментарии. - когда я удаляю темы с помощью CLI 'kafka-topic', тема удаляется из kafka и из KSQL - когда я делаю это через zookeeper, тема удаляется из kafka, но не из KSQL. - связанные потоки и таблицы в KSQL все еще существуют

Matthias 14.12.2018 19:38

Я чувствую вашу боль - темы, потоки, таблицы - от всего этого, кажется, трудно избавиться навсегда. Даже с ядерным вариантом, который я описал выше, они иногда возвращаются позже. Итак, я предполагаю, что где-то есть хранилище метаданных KSQL, в котором хранится эта информация. Дайте мне знать, если вы добьетесь каких-либо успехов в этом вопросе, надеюсь, следующая версия будет работать лучше.

medloh 14.12.2018 22:01

Думаю, я нашел ответ или, по крайней мере, в правильном направлении.

Вам нужно перерегистрировать тему в потоке. После небольшого взлома мне удалось повторно привязать мои темы к потокам, отбросив потоки.

REGISTER TOPIC <ksql_topic_name> WITH (KAFKA_TOPIC='<kafka_topic_name>', VALUE_FORMAT='<format>');

Потом,

DROP STREAM <stream_name>;

Я не знаю, работает ли это во всех случаях, но это вернуло меня туда, где я хочу быть. Если кто-то еще может повторить это и найти более надежное решение, я хотел бы услышать об этом.

Сначала вам нужно будет завершить все запущенные запросы.

SHOW QUERIES;  --> that will show you the active queries (COPY QUERY ID)

Потом:

TERMINATE [QUERY ID];

Потом: УДАЛИТЬ [ТАБЛИЦА ИЛИ ПОТОК];

Из официальной документации я бы сделал так:

SHOW QUERIES;

Запишите QueryID;

TERMINATE <QueryID>;

DROP TABLE <tablename>;

[См. Документацию ...]

Другие вопросы по теме