Восстановление Kafka Cluster с ошибки переполнения диска - PullRequest
0 голосов
/ 08 июля 2019

У нас есть 3-узловый кластер Kafka.Для хранения данных у нас есть 2 смонтированных диска - /data/disk1 и /data/disk2 в каждом из 3 узлов.Значение log.dirs в kafka.properties:

log.dirs=/data/disk1/kafka-logs,/data/disk2/kafka-logs

Так получилось, что на одном из узлов Node1 раздел диска /data/disk2/kafka-logs заполнен 100% заполнен.

Причина, по которой это произошло, заключается в том, что мы воспроизводили данные из filebeat в тему kafka, и многие данные были переданы за очень короткое время.Я временно изменил срок хранения для этой темы на 1 day с 7 days, поэтому размер темы стал нормальным.

Проблема в том, что в Node1 заполнено /data/disk2/kafka-logs 100%Процесс kafka просто не запустится и не выдаст ошибку:

Jul 08 12:03:29 broker01 kafka[23949]: [2019-07-08 12:03:29,093] INFO Recovering unflushed segment 0 in log my-topic-0. (kafka.log.Log)
Jul 08 12:03:29 broker01 kafka[23949]: [2019-07-08 12:03:29,094] INFO Completed load of log my-topic-0 with 1 log segments and log end offset 0 in 2 ms (kafka.log.Log)
Jul 08 12:03:29 broker01 kafka[23949]: [2019-07-08 12:03:29,095] ERROR There was an error in one of the threads during logs loading: java.lang.InternalError: a fault occurred in a recent unsafe memory access operation in compiled Java code (kafka.log.LogManager)
Jul 08 12:03:29 broker01 kafka[23949]: [2019-07-08 12:03:29,101] FATAL [Kafka Server 1], Fatal error during KafkaServer startup. Prepare to shutdown (kafka.server.KafkaServer)
Jul 08 12:03:29 broker01 kafka[23949]: java.lang.InternalError: a fault occurred in a recent unsafe memory access operation in compiled Java code
Jul 08 12:03:29 broker01 kafka[23949]: at java.nio.HeapByteBuffer.<init>(HeapByteBuffer.java:57)
Jul 08 12:03:29 broker01 kafka[23949]: at java.nio.ByteBuffer.allocate(ByteBuffer.java:335)
Jul 08 12:03:29 broker01 kafka[23949]: at org.apache.kafka.common.record.FileLogInputStream$FileChannelLogEntry.loadRecord(FileLogInputStream.java:135)
Jul 08 12:03:29 broker01 kafka[23949]: at org.apache.kafka.common.record.FileLogInputStream$FileChannelLogEntry.record(FileLogInputStream.java:149)
Jul 08 12:03:29 broker01 kafka[23949]: at kafka.log.LogSegment.$anonfun$recover$1(LogSegment.scala:22

Коэффициент репликации для большинства тем: 2 или 3.Итак, мне интересно, могу ли я сделать следующее:

  1. Изменить коэффициент репликации на 2 для всех тем (Узел 2 и Узел 3 работают нормально)
  2. delete некоторые вещи из Node1.
  3. Перезапуск Node 1
  4. Измените коэффициент репликации обратно на 2 или 3, как было изначально.

Кто-нибудь знает лучший способили лучшее предложение?

Обновление : необходимы шаги 1 и 4 not.Достаточно просто 2 и 3, если у вас есть реплики.

1 Ответ

1 голос
/ 09 июля 2019

Ваша проблема (и решение соответственно) аналогична описанной в этом вопросе: Кафка 0.9.0.1 не запускается с фатальным исключением

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

Итак, мне интересно, могу ли я сделать следующее ...

Отвечая на ваш вопрос конкретно - да, вы можете выполнить шаги, которые вы описали в последовательности, и это поможет вернуть кластер в согласованное состояние.

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

...