Après avoir démarré Kafka Connect (connect-standalone
), ma tâche échoue immédiatement après le démarrage de:
Java.lang.OutOfMemoryError: Java heap space
at Java.nio.HeapByteBuffer.<init>(HeapByteBuffer.Java:57)
at Java.nio.ByteBuffer.allocate(ByteBuffer.Java:335)
at org.Apache.kafka.common.network.NetworkReceive.readFromReadableChannel(NetworkReceive.Java:93)
at org.Apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.Java:71)
at org.Apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.Java:154)
at org.Apache.kafka.common.network.KafkaChannel.read(KafkaChannel.Java:135)
at org.Apache.kafka.common.network.Selector.pollSelectionKeys(Selector.Java:343)
at org.Apache.kafka.common.network.Selector.poll(Selector.Java:291)
at org.Apache.kafka.clients.NetworkClient.poll(NetworkClient.Java:260)
at org.Apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.Java:232)
at org.Apache.kafka.clients.consumer.internals.ConsumerNetworkClient.poll(ConsumerNetworkClient.Java:180)
at org.Apache.kafka.clients.consumer.internals.AbstractCoordinator.ensureCoordinatorReady(AbstractCoordinator.Java:193)
at org.Apache.kafka.clients.consumer.internals.ConsumerCoordinator.poll(ConsumerCoordinator.Java:248)
at org.Apache.kafka.clients.consumer.KafkaConsumer.pollOnce(KafkaConsumer.Java:1013)
at org.Apache.kafka.clients.consumer.KafkaConsumer.poll(KafkaConsumer.Java:979)
at org.Apache.kafka.connect.runtime.WorkerSinkTask.pollConsumer(WorkerSinkTask.Java:316)
at org.Apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.Java:222)
at org.Apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.Java:170)
at org.Apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.Java:142)
at org.Apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.Java:140)
at org.Apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.Java:175)
at Java.util.concurrent.Executors$RunnableAdapter.call(Executors.Java:511)
at Java.util.concurrent.FutureTask.run(FutureTask.Java:266)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
at Java.lang.Thread.run(Thread.Java:745)
Certaines documentations Kafka mentionnent l’espace de tas, vous invitant à l’essayer avec "la valeur par défaut" et ne le modifiant que s’il ya des problèmes, mais il n’existe aucune instruction pour modifier l’espace de tas.
Vous pouvez contrôler la taille maximale et la taille initiale du segment en définissant la variable d'environnement KAFKA_HEAP_OPTS
.
L'exemple suivant définit une taille de départ de 512 Mo et une taille maximale de 1 Go:
KAFKA_HEAP_OPTS="-Xms512m -Xmx1g" connect-standalone connect-worker.properties connect-s3-sink.properties
Lors de l'exécution d'une commande Kafka telle que connect-standalone
, le script kafka-run-class
est appelé, définit une taille de segment de mémoire par défaut de 256 Mo dans la variable d'environnement KAFKA_HEAP_OPTS
, si elle n'est pas déjà définie.
Même si je faisais face au problème, je ne pouvais pas démarrer mon producteur et consommateur pour un sujet donné. Supprimez également tous les fichiers journaux inutiles et toutes les rubriques. Même si cela n’est pas lié au problème.
Changer le kafka-run-class.sh
n'a pas fonctionné pour moi. J'ai changé les fichiers ci-dessous
kafka-console-consumer.sh
kafka-console-producer.sh
et a cessé d’obtenir une erreur de MOO. Consommateur et producteur ont bien travaillé par la suite.
Augmentation de la taille à KAFKA_HEAP_OPTS="-Xmx1G"
était 512m plus tôt.