1: Vispārīga informācija
Es iepriekš izmantoju kafku Linux vidē, un ar pašu kafku nebija problēmu. Tomēr projektam, pie kura es pašlaik strādāju, ir jābūt saderīgam ar Window un Linux, un, lietojot Kafka Windows vidē, es atklāju, ka Kafka pati par sevi nav tik saderīga ar Windows kā Linux.
2: Problēma
Testējot Kafka logā, es atklāju, ka Kafka bija kļūda pēc tā palaišanas uz noteiktu laiku:
Failu izmanto cita programma, un process tam nevar piekļūt.
[2021-07-06 09:06:10,800] KĻŪDA Neizdevās iztīrīt žurnālu __consumer_offsets-42 katalogā C:\tmp\kafka-logs IOException (kafka.server.LogDirFailureChannel) dēļ
java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\00000000000000000000.timeindex.cleaned ->
C:\tmp\kafka-logs\__consumer_offsets-42\00000000000000000000.timeindex.swap: 另一个程序正在使用此文件,进程无法访问。
vietnē sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86) vietnē sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97) sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:387) vietnē sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287) pie java.nio.file.Files.move(Files.java:1395) org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:904) vietnē kafka.log.AbstractIndex.renameTo(AbstractIndex.scala:210) pie kafka.log.LazyIndex$IndexValue.renameTo(LazyIndex.scala:155) pie kafka.log.LazyIndex.$anonfun$renameTo$1(LazyIndex.scala:79) vietnē kafka.log.LazyIndex.renameTo(LazyIndex.scala:79) kafka.log.LogSegment.changeFileSuffixes(LogSegment.scala:496) pie kafka.log.Log.$anonfun$replaceSegments$4(Log.scala:2402) pie kafka.log.Log.$anonfun$replaceSegments$4$adapted(Log.scala:2402) vietnē scala.collection.immutable.List.foreach(List.scala:333) kafka.log.Log.replaceSegments(Log.scala:2402) vietnē kafka.log.Cleaner.cleanSegments(LogCleaner.scala:613) pie kafka.log.Cleaner.$anonfun$doClean$6(LogCleaner.scala:538) pie kafka.log.Cleaner.$anonfun$doClean$6$adapted(LogCleaner.scala:537) vietnē scala.collection.immutable.List.foreach(List.scala:333) vietnē kafka.log.Cleaner.doClean(LogCleaner.scala:537) vietnē 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) vietnē kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96) Nomākts: java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\000000000000000000000.timeindex.cleaned -> C:\tmp\kafka-logs\__consumer_offsets-42\ 000000000000000000000000000.timeindex.swap: Šo failu izmanto cita programma, un process nav pieejams.
vietnē sun.nio.fs.WindowsException.translateToIOException(WindowsException.java:86) vietnē sun.nio.fs.WindowsException.rethrowAsIOException(WindowsException.java:97) sun.nio.fs.WindowsFileCopy.move(WindowsFileCopy.java:301) vietnē sun.nio.fs.WindowsFileSystemProvider.move(WindowsFileSystemProvider.java:287) pie java.nio.file.Files.move(Files.java:1395) org.apache.kafka.common.utils.Utils.atomicMoveWithFallback(Utils.java:901) ... Vēl 20
3: Cēlonis
Kafka žurnāla tīrīšanas politika izraisa to, ka Windows vidē nav atļauts pārdēvēt failu, atverot žurnālu, kas jātīra (tas ir iespējams Linux vidē), izraisot Kafka avāriju.
Visizplatītākais risinājums internetā ir "iztukšot kafkas žurnālfailus un restartēt kafku", kas ražošanas vidē ir acīmredzami nereāls. Tāpēc sākumā es nācu klajā ar šādiem diviem situācijas risinājumiem:
1. risinājums: modificējiet žurnāla tīrīšanas politiku, lai mainītu žurnāla tīrīšanas laiku uz bezgalīgu (-1), lai pastāvīgi saglabātu kafkas datu žurnālus Trūkumi: (1) Diska vieta turpinās palielināties 2. iespēja: izveidojiet virtuālo mašīnu operētājsistēmā Windows (docker ir tāds pats, bet apgrūtinošāks) un pēc tam izvietojiet Kafku virtuālajā mašīnā Trūkumi: (1) O&M personālam ir jāzina dažas Linux O&M zināšanas (2) Palieliniet atmiņas patēriņu
Acīmredzot abu iespēju trūkumi man bija nepanesami, tāpēc es pievērsu uzmanību Kafkas kopienai, lai saņemtu palīdzību.
Noklikšķiniet šeit, lai diskutētu par dievu pielūgšanu:Hipersaites pieteikšanās ir redzama.
Ir saprotams, ka Kafkas problēma zem loga nav tik vienkārša, kā iedomājies.Pagaidām nav oficiāla risinājuma。 Citiem vārdiem sakot, (Nelietojiet kafku zem loga! )
3. risinājums: Bet pat tad, nepieciešamība lietot kafku zem loga joprojām pastāv, tāpēc joprojām ir daudz dievu, kas pievērš uzmanību un piedāvā dažus risinājumus. Viens no lielajiem dieviem ir izstrādājis kafkas pirmkodu šai problēmai. Pēc testēšanas viņa risinājums atrisināja problēmu zem loga, padarot kafku pieejamu zem loga. Tomēr šim risinājumam Kafkas līdzstrādnieks teica, ka tas var nebūt drošs (tas ir, plāksteri nevar integrēt oficiālajā versijā).
4: Atrisināt (beigās ir lejupielādes saite kompilētajai kafka pakotnei) Lai gan Kafkas amatpersonas saka, ka plāksteris nav ļoti drošs, amatpersona līdz šim neko nav darījusi. Un pieprasījums pastāv, tāpēc pēc dažām pārdomām es joprojām plānoju izmantot 3. varianta metodi, lai atrisinātu problēmu vienreiz un uz visiem laikiem, tāpēc mēs ievietosim plāksteri un pārkompilēsim kafku.
4.1: Kafka ielāpa versijas lejupielāde
Lejupielādējiet šī autora kafka plākstera versiju
Hipersaites pieteikšanās ir redzama.
4.2: Kompilējiet Kafka ielāpa versiju Tā kā kafka kompilācija tiek veikta, izmantojot gradle, vispirms ir jākonfigurē gradle
Lai uzzinātu, kā konfigurēt gradle, varat skatīt šo rakstu (atkārtoti izdrukāts, pārkāpums tiks izdzēsts) Gradle uzstādīšana un konfigurēšana operētājsistēmā Windows:Hipersaites pieteikšanās ir redzama.
Lai iegūtu informāciju par to, kā kompilēt Kafku, varat skatīt github------ Kā kompilēt Kafku, izmantojot Gradle:Hipersaites pieteikšanās ir redzama.
Pēc kompilēšanas jūs varat iegūt Kafka pakotni, ko var izmantot operētājsistēmā Windows.
Saskaņā ar jēdzienu "copy-paste" (galu galā avota koda apkopošana joprojām ir diezgan laikietilpīga), šeit ir lejupielādes saite kafka pakotnei, kuru es apkopoju, un jūs varat to lejupielādēt un izmantot tieši.
kafka_2.12-2.3.0_window Lejupielādes adrese dīkstāves versijai:
Hipersaites pieteikšanās ir redzama.
Oriģinālā saite:Hipersaites pieteikšanās ir redzama.
|