Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 14467|Odpověď: 1

Systém Kafka Windows se po určité době zavěsí

[Kopírovat odkaz]
Zveřejněno 12.07.2021 10:57:01 | | | |
1: Pozadí

Dříve jsem používal Kafku v linuxovém prostředí a s Kafkou samotnou jsem neměl žádný problém. Nicméně projekt, na kterém právě pracuji, musí být kompatibilní s Windows a Linuxem, a když používám Kafku v prostředí Window, zjistil jsem, že Kafka sama o sobě není tak kompatibilní s Windows jako s Linuxem.

2: Problém

Při testování Kafky pod Windows jsem zjistil, že Kafka měla po určitou dobu chybu:

Jiný program soubor používá a proces k němu nemá přístup.
Následující řešení problém zcela nevyřeší a nejsou doporučována

Windows Kafka CHYBA Nepodařilo se vyčistit log pro __consumer_offsets
https://www.itsvse.com/thread-9980-1-1.html




[2021-07-06 09:06:10,800] CHYBA Nepodařilo se vyčistit log pro __consumer_offsets-42 v směru C:\tmp\kafka-logs kvůli 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)
        at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
        at sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:387)
        at sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
        at java.nio.file.Files.move(Files.java:1395)
        at org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:904)
        na kafka.log.AbstractIndex.renameTo(AbstractIndex.scala:210)
        at kafka.log.LazyIndex$IndexValue.renameTo(LazyIndex.scala:155)
        at kafka.log.LazyIndex.$anonfun$renameTo$1(LazyIndex.scala:79)
        at kafka.log.LazyIndex.renameTo(LazyIndex.scala:79)
        at kafka.log.LogSegment.changeFileSuffixes(LogSegment.scala:496)
        at kafka.log.Log.$anonfun$replaceSegments$4(Log.scala:2402)
        at kafka.log.Log.$anonfun$replaceSegments$4$adapted(Log.scala:2402)
        at scala.collection.immutable.List.foreach(List.scala:333)
        at kafka.log.Log.replaceSegments(Log.scala:2402)
        na kafka.log.Cleaner.cleanSegments(LogCleaner.scala:613)
        na kafka.log.Cleaner.$anonfun$doClean$6(LogCleaner.scala:538)
        na kafka.log.Cleaner.$anonfun$doClean$6$adapted(LogCleaner.scala:537)
        at scala.collection.immutable.List.foreach(List.scala:333)
        na kafka.log.Cleaner.doClean(LogCleaner.scala:537)
        na kafka.log.Cleaner.clean(LogCleaner.scala:511)
        na kafka.log.LogCleaner$CleanerThread.cleanLog(LogCleaner.scala:380)
        na kafka.log.LogCleaner$CleanerThread.cleanFilthiestLog(LogCleaner.scala:352)
        na kafka.log.LogCleaner$CleanerThread.tryCleanFilthiestLog(LogCleaner.scala:332)
        na kafka.log.LogCleaner$CleanerThread.doWork(LogCleaner.scala:321)
        at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96)
        Potlačeno: java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\0000000000000000000000.timeindex.clean -> C:\tmp\kafka-logs\__consumer_offsets-42\ 000000000000000000000000000000000000.timeindex.swap: Jiný program používá tento soubor a proces je nepřístupný.

                at sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86)
                at sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97)
                at sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:301)
                at sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287)
                at java.nio.file.Files.move(Files.java:1395)
                at org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:901)
                ... Dalších 20

3: Příčina

Politika čištění logů Kafka spouští, že ve Windows prostředí není možné soubor přejmenovat při otevírání logu, který je třeba vyčistit (což je možné v prostředí Linuxu), což způsobuje pád Kafky.

Nejčastějším řešením na internetu je "vyprázdnit logovací soubory Kafky a restartovat Kafku", což je v produkčním prostředí samozřejmě nereálné. Takže na začátku jsem přišel s těmito dvěma řešeními situace:

Řešení 1: Upravte politiku čištění logů tak, aby se doba čištění logů změnila na nekonečnou (-1), aby se data Kafka uchovávala trvale
Nevýhody: (1) Prostor na disku bude nadále narůstat
Možnost 2: Postavit virtuální stroj na Windows (docker je stejný, ale složitější) a pak nasadit Kafku přímo do virtuálního stroje
Nevýhody: (1) Personál O&M musí znát nějaké znalosti Linuxu O&M (2) Zvýšit spotřebu paměti

Samozřejmě, nedostatky obou možností pro mě byly nesnesitelné, takže jsem se obrátil na komunitu Kafka s žádostí o pomoc.

Klikněte zde pro diskusi o uctívání bohů:Přihlášení k hypertextovému odkazu je viditelné.

Je známo, že problém Kafky pod oknem není tak jednoduchý, jak se domnívá.Zatím neexistuje žádné oficiální řešení。 Jinými slovy (Nepoužívejte Kafku pod oknem! )

Řešení 3: I tak však stále existuje potřeba používat kafku pod oknem, takže stále existuje mnoho bohů, kteří věnují pozornost a navrhují nějaká řešení. Jeden z velkých bohů vytvořil kafkův zdrojový kód pro tento problém. Po testování jeho řešení skutečně vyřešilo problém pod oknem, díky čemuž byl Kafka dostupná pod oknem. Nicméně pro toto řešení přispěvatel Kafky uvedl, že nemusí být bezpečné (tedy že záplatu nelze integrovat do oficiální verze).

4: Vyřešit (na konci je odkaz ke stažení zkompilovaného balíčku Kafka)
Ačkoliv představitelé Kafky tvrdí, že nášivka není příliš bezpečná, zatím nic neudělal. A poptávka skutečně existuje, takže po zvážení stále plánuji použít metodu třetí možnosti k vyřešení problému jednou provždy, takže patch vložíme a Kafku překompilujeme.

4.1: Stažení verze Kafka patch

Stáhněte si verzi tohoto autora s Kafka patchem

Přihlášení k hypertextovému odkazu je viditelné.

4.2: Zkompilujte verzi Kafka patch
Protože Kafka kompilace probíhá přes Gradle, je potřeba Gradle nejdřív nakonfigurovat

Pro nastavení gradle se můžete podívat na tento článek (přetištěn, porušení bude smazáno) Instalace a konfigurace gradle ve Windows:Přihlášení k hypertextovému odkazu je viditelné.

Pro informace o tom, jak zkompilovat Kafku, můžete se podívat na github------ Jak zkompilovat Kafku pomocí Gradle:Přihlášení k hypertextovému odkazu je viditelné.

Po kompilaci si můžete stáhnout balíček Kafka, který lze použít ve Windows.

V souladu s konceptem "kopírovat a vkládat" (koneckonců, kompilace zdrojového kódu je stále časově náročná), zde je odkaz ke stažení balíčku Kafka, který jsem zkompiloval, a můžete si ho stáhnout a používat přímo.

kafka_2.12-2.3.0_window Adresa ke stažení verze proti výpadku:

Přihlášení k hypertextovému odkazu je viditelné.

Původní odkaz:Přihlášení k hypertextovému odkazu je viditelné.







Předchozí:MySQL dotazuje na anotace databázové tabulky
Další:Shrnutí rozdělených tabulek v SQL Serveru
Zveřejněno 12.07.2021 21:16:33 |
Šéf fóra, který ještě nehrál, je tak hluboce uctíván
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com