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

Вид: 14467|Ответ: 1

Система Kafka Windows отключается после некоторого времени работы

[Скопировать ссылку]
Опубликовано 12.07.2021 10:57:01 | | | |
1: Предыстория

Раньше я использовал Kafka в среде Linux, и с самой Kafka проблем не было. Однако проект, над которым я сейчас работаю, должен быть совместим с Windows и Linux, и когда я использую Kafka в среде Windows, я обнаружил, что сама Kafka не так совместима с Windows, как Linux.

2: Проблема

При тестировании Kafka в Windows я обнаружил, что после запуска Kafka появилась ошибка в течение определённого времени:

Другая программа использует файл, и процесс не может к нему получить доступ.
Следующие решения не полностью решают проблему и не рекомендуются

Windows Kafka ОШИБКА Не удалось очистить журнал для __consumer_offsets
https://www.itsvse.com/thread-9980-1-1.html




[2021-07-06 09:06:10,800] ОШИБКА Не удалось очистить журнал для __consumer_offsets-42 в dir C:\tmp\kafka-logs из-за IOException (kafka.server.LogDirFailureChannel)
java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\00000000000000000000.timeindex.cleaned ->
C:\tmp\kafka-logs\__consumer_offsets-42\00000000000000000000.timeindex.swap: 另一个程序正在使用此文件,进程无法访问。

        на sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
        на sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
        на sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:387)
        на sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
        на java.nio.file.Files.move(Files.java:1395)
        на org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:904)
        на kafka.log.AbstractIndex.renameTo(AbstractIndex.scala:210)
        kafka.log.LazyIndex$IndexValue.renameTo(LazyIndex.scala:155)
        на kafka.log.LazyIndex.$anonfun$renameTo$1(LazyIndex.scala:79)
        на kafka.log.LazyIndex.renameTo(LazyIndex.scala:79)
        на kafka.log.LogSegment.changeFileSuffixes(LogSegment.scala:496)
        на kafka.log.Log.$anonfun$replaceSegments$4(Log.scala:2402)
        на kafka.log.Log.$anonfun$replaceSegments$4$adapted(Log.scala:2402)
        at scala.collection.immutable.List.foreach(List.scala:333)
        на kafka.log.Log.replaceSegments(Log.scala:2402)
        на kafka.log.Cleaner.cleanSegments(LogCleaner.scala:613)
        на kafka.log.Cleaner.$anonfun$doClean$6(LogCleaner.scala:538)
        на kafka.log.Cleaner.$anonfun$doClean$6$adapted(LogCleaner.scala:537)
        at scala.collection.immutable.List.foreach(List.scala:333)
        на kafka.log.Cleaner.doClean(LogCleaner.scala:537)
        на kafka.log.Cleaner.clean(LogCleaner.scala:511)
        на kafka.log.LogCleaner$CleanerThread.cleanLog(LogCleaner.scala:380)
        на kafka.log.LogCleaner$CleanerThread.cleanFilthiestLog(LogCleaner.scala:352)
        на kafka.log.LogCleaner$CleanerThread.tryCleanFilthiestLog(LogCleaner.scala:332)
        на kafka.log.LogCleaner$CleanerThread.doWork(LogCleaner.scala:321)
        на kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96)
        Подавлено: java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\0000000000000000000000.timeindex.clean -> C:\tmp\kafka-logs\__consumer_offsets-42\ 000000000000000000000000.timeindex.swap: Другая программа использует этот файл, и процесс недоступен.

                на sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
                на sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
                на sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:301)
                на sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
                на java.nio.file.Files.move(Files.java:1395)
                на org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:901)
                ... Ещё 20

3: Причина

Политика очистки журналов Kafka запускает то, что в окружении Windows нельзя переименовать файл при открытии журнала, который нужно очистить (это возможно в среде Linux), что приводит к сбою Kafka.

Самое распространённое решение в интернете — «опустошить лог-файлы Kafka и перезапустить Kafka», что явно нереалистично в производственной среде. Поэтому в начале я предложил следующие два решения для этой ситуации:

Решение 1: Изменить политику очистки журнала, чтобы изменить время очистки журнала на бесконечное (-1) для постоянного хранения данных Kafka
Недостатки: (1) Пространство диска будет продолжать увеличиваться
Вариант 2: Постройте виртуальную машину на Windows (docker такая же, но более проблематично), а затем развернуть Kafka в виртуальной машине
Недостатки: (1) Персонал O&M должен знать некоторые знания по эксплуатации и машине Linux (2) Увеличить потребление памяти

Очевидно, что недостатки обоих вариантов были для меня невыносимы, поэтому я обратил внимание на сообщество Kafka за помощью.

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

Известно, что проблема с Кафкой под окном не так проста, как предполагалось.Официального решения пока нет。 Другими словами (Не используйте кафку под окном! )

Решение 3: Но даже так, необходимость использовать кафку под окном всё ещё существует, поэтому многие боги всё ещё обращают внимание и предлагают решения. Один из великих богов разработал исходный код Кафки для этой задачи. После тестирования его решение решило проблему под окном, сделав Кафку доступной под окном. Однако для этого решения автор Kafka отметил, что оно может быть небезопасным (то есть патч не может быть интегрирован в официальную версию).

4: Solve (в конце есть ссылка для скачивания скомпилированного пакета Kafka)
Хотя представители Кафки утверждают, что нашивка не очень безопасна, до сих пор они ничего не предприняли. И спрос существует, поэтому, после некоторых раздумий, я всё ещё планирую использовать метод варианта 3, чтобы решить проблему раз и навсегда, поэтому мы вставим патч и перекомпилируем Kafka.

4.1: Скачать патч Kafka

Скачайте кафка-патч этого автора

Вход по гиперссылке виден.

4.2: Компиляция патча Kafka
Поскольку компиляция Kafka осуществляется через gradle, сначала нужно настроить gradle

Чтобы узнать о том, как настроить gradle, вы можете ознакомиться с этой статьёй (перепечатана, нарушение будет удалено) Установка и настройка gradle в Windows:Вход по гиперссылке виден.

Для получения информации о том, как компилировать Kafka, вы можете обратиться на github------ Как скомпилировать Kafka с помощью Gradle:Вход по гиперссылке виден.

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

В соответствии с концепцией «копировать-вставить» (в конце концов, компиляция исходного кода всё равно занимает много времени), вот ссылка для скачивания пакета Kafka, который я скомпилировал, и вы можете скачать его и использовать напрямую.

kafka_2.12-2.3.0_window Адрес для скачивания версии против простоя:

Вход по гиперссылке виден.

Оригинальная ссылка:Вход по гиперссылке виден.







Предыдущий:MySQL делает запросы к аннотациям таблицы базы данных
Следующий:Обзор разделённых таблиц на SQL Server
Опубликовано 12.07.2021 21:16:33 |
Босс форума, который ещё не играл, так глубоко обожаем
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com