web-dev-qa-db-ja.com

Kafkaヒープ領域が不足している接続

開始後Kafka接続(connect-standalone)、次のように開始した直後に私のタスクが失敗します:

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)

いくつかのKafkaのドキュメントにヒープスペースの記載があります。「デフォルト」で試して、問題がある場合にのみ変更するように指示していますが、ヒープスペースを変更する手順はありません。

12
Robin Daugherty

KAFKA_HEAP_OPTS環境変数を設定することにより、最大および初期ヒープサイズを制御できます。

次の例では、512 MBの開始サイズと1 GBの最大サイズを設定します。

KAFKA_HEAP_OPTS="-Xms512m -Xmx1g" connect-standalone connect-worker.properties connect-s3-sink.properties

Kafka connect-standaloneなどのコマンドを実行すると、kafka-run-classスクリプトが呼び出されます デフォルトのヒープサイズ256 MBを設定KAFKA_HEAP_OPTS環境変数がまだ設定されていない場合。

18
Robin Daugherty

問題に直面していても、特定のトピックのプロデューサーとコンシューマーを開始できませんでした。また、不要なログファイルとトピックもすべて削除しました。ただし、これは問題とは関係ありません。

kafka-run-class.shを変更してもうまくいきませんでした。以下のファイルを変更しました

kafka-console-consumer.sh

kafka-console-producer.sh

oOMエラーの発生を停止しました。この後、消費者と生産者の両方がうまく働きました。

サイズをKAFKA_HEAP_OPTS="-Xmx1G"に増やしたところ、512m早くなりました。

1
Sagarmatha