Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 14467|Отговор: 1

Системата Kafka Windows затваря след определен период на работа

[Копирай линк]
Публикувано в 12.07.2021 г. 10:57:01 ч. | | | |
1: Предистория

Използвах Kafka в Linux средата преди и нямаше проблем със самата Kafka. Въпреки това, проект, по който работя в момента, трябва да е съвместим с Windows и Linux, и когато използвам Kafka в Window средата, установих, че самата Kafka не е толкова съвместима с Windows, колкото Linux.

2: Проблем

Когато тествах Kafka в Window, открих, че 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: 另一个程序正在使用此文件,进程无法访问。

        at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
        на sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
        на sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:387)
        at sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
        на java.nio.file.Files.move(Files.java:1395)
        at 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)
        at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96)
        Потиснато: java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\0000000000000000000000000.timeindex.clean -> C:\tmp\kafka-logs\__consumer_offsets-42\ 000000000000000000000000000.timeindex.swap: Друга програма използва този файл и процесът е недостъпен.

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

3: Причина

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

Най-честото решение в интернет е "изпразни лог файловете на Kafka и рестартиране на Kafka", което очевидно е нереалистично в продукционна среда. Затова в началото предложих следните две решения за ситуацията:

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

Очевидно недостатъците и на двете опции бяха непоносими за мен, затова обърнах вниманието си към общността на Кафка за помощ.

Кликнете тук за дискусия относно поклонението на боговете:Входът към хиперлинк е видим.

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

Решение 3: Но дори и така, нуждата да се използва кафка под прозореца все още съществува, така че все още има много богове, които обръщат внимание и предлагат някои решения. Един от великите богове е разработил изходния код на Кафка за този проблем. След тестове, решението му реши проблема под прозореца, като направи Кафка достъпна под прозореца. Въпреки това, за това решение сътрудникът на Kafka каза, че може да не е безопасно (т.е. пачът не може да бъде интегриран в официалната версия).

4: Solve (има линк за изтегляне на компилирания Kafka пакет в края)
Въпреки че официални лица на Кафка твърдят, че нашивката не е много безопасна, засега не е предприела нищо. И търсенето съществува, така че след известно обмисляне все пак планирам да използвам метода на опция 3, за да реша проблема веднъж завинаги, така че ще сложим пача и ще компилираме Kafka отново.

4.1: Изтегляне на пач версия на Kafka

Изтеглете версията на Kafka patch на този автор

Входът към хиперлинк е видим.

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