|
1: Antecedentes
Antes de la utilización de kafka se encuentran en el entorno Linux, no hay ningún problema con kafka en sí. Sin embargo, un proyecto en el que estamos trabajando actualmente necesita ser compatible con Window y Linux, y cuando usamos Kafka en entorno Window, encontramos que el propio kafka no es tan compatible con Window como lo es con Linux.
2: Problemas
Al probar kafka bajo Window, encontré que kafka tenía un error después de haber estado en línea durante un tiempo:
Otro programa está utilizando el archivo y el proceso no puede acceder a él. Las siguientes soluciones no resuelven completamente el problema y no son recomendables
Windows Kafka ERROR Failed to clean up log for __consumer_offsets h ttps:// www.itsvse.com/thread-9980-1-1.html
[2021-07-06 09:06:10,800] ERROR No se ha podido limpiar el registro de __consumer_offsets-42 en el directorio C:\tmp\kafka-logs debido a una IOException (kafka.server. LogDirFailureChannel) java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\000000000000000000000000.timeindex.cleaned -> C:\tmp\kafka-logs\__consumer_offsets-42\000000000000000000000000.timeindex.swap: Este archivo está siendo utilizado por otra aplicación y es inaccesible para el proceso.
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) at 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) at kafka.log.Cleaner.cleanSegments(LogCleaner.scala:613) at kafka.log.Cleaner.$anonfun$doClean$6(LogCleaner.scala:538) at kafka.log.Cleaner.$anonfun$doClean$6$adapted(LogCleaner.scala:537) at scala.collection.immutable.List.foreach(List.scala:333) at kafka.log.Cleaner.doClean(LogCleaner.scala:537) at kafka.log.Cleaner.clean(LogCleaner.scala:511) at kafka.log.LogCleaner$CleanerThread.cleanLog(LogCleaner.scala:380) at kafka.log.LogCleaner$CleanerThread.cleanFilthiestLog(LogCleaner.scala:352) at kafka.log.LogCleaner$CleanerThread.tryCleanFilthiestLog(LogCleaner.scala:332) at kafka.log.LogCleaner$CleanerThread.doWork(LogCleaner.scala:321) at kafka.utils.ShutdownableThread.run(ShutdownableThread.scala:96) Suprimido: java.nio.file.FileSystemException: C:\tmp\kafka-logs\__consumer_offsets-42\ 00000000000000000000.timeindex.cleaned -> C:\tmp\kafka-logs\__consumer_offsets-42\000000000000000000000000000000.timeindex.swap: Another process is using this El archivo está siendo utilizado por otro programa y el proceso no puede acceder a él.
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) ... 20 más 3: Causa.
La política de limpieza de logs de kafka está provocada porque en un entorno de ventanas no se permite renombrar el fichero mientras se abre el log a limpiar (sí se permite en un entorno linux), lo que provoca caídas de kafka.
La solución más común en Internet es "vaciar el archivo de registro de kafka y luego reiniciar kafka", lo que obviamente no es realista en el entorno de producción. Así que al principio se me ocurrieron las siguientes dos soluciones para la situación:
Opción 1: Modificar la estrategia de limpieza de logs, modificar el tiempo de limpieza de logs a infinito (-1), para que los logs de datos de kafka se almacenen permanentemente. Inconvenientes: (1) el espacio en disco seguirá aumentando Opción 2: construir una máquina virtual en la ventana (Docker es el mismo, y más problemas), y luego desplegado en la máquina virtual kafka Desventajas: (1) el personal de operación y mantenimiento necesita saber un poco de linux conocimientos de operación y mantenimiento (2) aumentar el consumo de memoria
Obviamente, los inconvenientes de ambas opciones eran demasiado para mí, así que dirigí mi atención a la comunidad kafka en busca de ayuda.
Haz clic aquí para adorar a los dioses de la exploración: https: //github.com/apache/kafka/pull/6329
Por lo que he podido ver, resulta que este problema con kafka bajo ventana no es tan fácil como uno podría pensar, y no hay ninguna solución oficial hasta el momento. En otras palabras (¡no usen kafka bajo window!)
Opción 3: Sin embargo, aún así, la demanda de utilizar kafka bajo ventana sigue existiendo, por lo que todavía hay un montón de dioses que se preocupan y proponen algunas soluciones. Hay un dios para este problema de kafka código fuente para el desarrollo secundario. Después de las pruebas, su solución bajo la ventana resuelve el problema, haciendo kafka se puede utilizar bajo la ventana. Pero para esta solución, kafka colaborador dijo que puede no ser demasiado seguro (es decir, no puede integrar el parche en el oficial).
4: solución (la cola ha proporcionado compilado paquete kafka enlace de descarga) Aunque kafka oficial dijo que el parche no es muy seguro, pero el funcionario hasta el momento y no hizo nada. La necesidad es real, así que después de algunas consideraciones, voy a ir con la opción 3 y resolver el problema de una vez por todas, por lo que a continuación vamos a parchear en el parche y volver a compilar kafka.
4.1: Descargar la versión del parche de kafka
Descarga la versión del parche de kafka desde este autor
h ttps:// github.com/apache/kafka/tree/0baf9c158b5681a55df4de3a0e6193d32b1433ff
4.2: Compilar la versión del parche de kafka Dado que la compilación de kafka se realiza a través de gradle, es necesario configurar gradle primero.
Sobre cómo configurar gradle puedes consultar este artículo (reproducido, infracción que se suprime) en Instalación y configuración de gradle en Windows: https: //blog.csdn.net/zhaokai0130/article/details/81008719
Sobre cómo compilar kafka, puede referirse a github ------ cómo utilizar gradle compilar kafka: https: //github.com/apache/kafka/tree/0baf9c158b5681a55df4de3a0e6193d32b1433ff
Después de compilar, puedes obtener un paquete kafka que puede ser usado bajo window.
En el espíritu del concepto "copiar-pegar" (después de todo, compilar el código fuente sigue consumiendo bastante tiempo), aquí tienes un enlace de descarga del paquete kafka compilado, descárgalo y úsalo directamente.
kafka_2.12-2.3.0_window downtime version dirección de descarga:
h ttps:// down.itsvse.com/item/nzraqz.html
Enlace original: https: //blog.csdn.net/chengtanyong4777/article/details/102542326
|
Previous:MySQL comentarios de tabla de base de datos de consulta.Next :[Informe]Resumen de servidor sql en tablas particionadas.
|