Куда делись данные из Kafka после рестарта?

Вы оставили работать Kafka на ночь, ушли домой, вернулись на следующее утро и обнаружили, что свет на работе вырубали.

Рестартуете Zookeeper, Kafka и хотите проверить, что ваши топики на месте, до того, как их пушить.

$ bin/kafka-topics.sh --list --zookeeper localhost:2181

Но список пуст. Пусто. Ничего. Вы в панике ищите вчерашние 100 Гб логов в системе. Но система похудела на 100 Гб. Что же произошло?

С вами произошли настройки Kafka по умолчанию

Помните, мы учились запускать Kafka c config/server.properties. Так вот если сходить в эти проперти, то можно там заметить такую строку: log.dirs=/tmp/kafka-logs.

А директория tmp не самое лучшее место для сохранения чего-либо в долгосрочной перспективе. Поменяйте этот путь на какой-то другой, хоть в /home направьте ваши ивенты, если вы в себе уверены.

После пары рестартов Kafka данные начинают пухнуть в указанной вами директории и вроде бы все хорошо.

До следующего "конца света"

После рестарта системы данные на месте, но через несколько мгновений они начинают исчезать.

Более того, мы в логах Kafka мы видим какие-то следы удаления, вроде вот таких

Deleting index .../messages-1/00000000000000000000.timeindex.deleted (kafka.log.TimeIndex)

Что делать? Кто виноват?

Если предположить, что какие-то метаданные о нашем топике messages сохранились, то мы можем попробовать их изменить, например командой, меняющей количество партиций. Результат наводит на подозрения в сторону Zookeeper, не так ли?

$ bin/kafka-topics.sh --alter --zookeeper localhost:2181 --partitions 4 --topic messages
Error while executing topic command : Topic messages does not exist on ZK path localhost:2181
[2017-03-24 20:36:06,816] ERROR java.lang.IllegalArgumentException: Topic messages does not exist on ZK path localhost:2181
    at kafka.admin.TopicCommand$.alterTopic(TopicCommand.scala:119)
    at kafka.admin.TopicCommand$.main(TopicCommand.scala:62)
    at kafka.admin.TopicCommand.main(TopicCommand.scala)
 (kafka.admin.TopicCommand$)

А вдруг Zookeeper тоже сплоховал и решил поперсестировать в директорию tmp?

Так и есть: zookeeper.properties содержит в себе замечательную строку dataDir=/tmp/zookeeper. Поправим и ее.

Перезапустим все.

Насладимся.

results matching ""

    No results matching ""