10

これは Stackoverflow に関する私の最初の投稿です。間違ったセクションを選択していないことを願っています。

環境 :

Kafka HEAP サイズは、次のファイルで構成されます。

/etc/systemd/system/kafka.service

次のパラメータを使用:

Environment="KAFKA_HEAP_OPTS=-Xms6g -Xmx6g"

OSは「CentOS Linux release 7.7.1908」です。

Kafka は"confluent-kafka-2.12-5.3.1-1.noarch"で、次のリポジトリからインストールされます。

# Confluent REPO
[Confluent.dist]
name=Confluent repository (dist)
baseurl=http://packages.confluent.io/rpm/5.3/7
gpgcheck=1
gpgkey=http://packages.confluent.io/rpm/5.3/archive.key
enabled=1

[Confluent]
name=Confluent repository
baseurl=http://packages.confluent.io/rpm/5.3
gpgcheck=1
gpgkey=http://packages.confluent.io/rpm/5.3/archive.key
enabled=1

数日前に 3 台のマシンの KAFKA クラスターで SSL を有効にしましたが、突然、次のコマンドが機能しなくなりました。

kafka-topics --bootstrap-server <the.fqdn.of.server>:9093 --describe --topic <TOPIC-NAME>

次のエラーが返されます:

[2019-10-03 11:38:52,790] ERROR Uncaught exception in thread 'kafka-admin-client-thread | adminclient-1':(org.apache.kafka.common.utils.KafkaThread) 
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.memory.MemoryPool$1.tryAllocate(MemoryPool.java:30)
    at org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.java:112)
    at org.apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.java:424)
    at org.apache.kafka.common.network.KafkaChannel.read(KafkaChannel.java:385)
    at org.apache.kafka.common.network.Selector.attemptRead(Selector.java:651)
    at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:572)
    at org.apache.kafka.common.network.Selector.poll(Selector.java:483)
    at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:539)
    at org.apache.kafka.clients.admin.KafkaAdminClient$AdminClientRunnable.run(KafkaAdminClient.java:1152)
    at java.lang.Thread.run(Thread.java:748)

「kafka-topics」経由でリクエストしようとすると、サーバーのログに次の行が表示されます。

/var/log/kafka/server.log :
[2019-10-03 11:41:11,913] INFO [SocketServer brokerId=<ID>] Failed authentication with /<ip.of.the.server> (SSL handshake failed) (org.apache.kafka.common.network.Selector)

クラスタに SSL を実装する前に、このコマンドを適切に使用できました。これが私が使用している構成です。「kafka-topics」を除くすべての機能 (コンシューマー、プロデューサーなど) が適切に動作します。

# SSL Configuration
ssl.truststore.location=<truststore-path>
ssl.truststore.password=<truststore-password>
ssl.keystore.type=<keystore-type>
ssl.keystore.location=<keystore-path>
ssl.keystore.password=<keystore-password>

# Enable SSL between brokers
security.inter.broker.protocol=SSL

# Listeners
listeners=SSL://<fqdn.of.the.server>:9093
advertised.listeners=SSL://<fqdn.of.the.server>:9093

証明書に問題はありません (内部 CA によって署名され、構成で指定されたトラストストアに追加した内部 CA)。OpenSSL はエラーを表示しません:

openssl s_client -connect <fqdn.of.the.server>:9093 -tls1
>> Verify return code: 0 (ok)

次のコマンドは、パラメーター「-consumer.config client-ssl.properties」のおかげで、SSL でうまく機能しています。

kafka-console-consumer --bootstrap-server <fqdn.of.the.server>:9093 --topic <TOPIC-NAME> -consumer.config client-ssl.properties

「client-ssl.properties」の内容は次のとおりです。

security.protocol=SSL
ssl.truststore.location=<truststore-path>
ssl.truststore.password=<truststore-password>

現在、「--zookeeper」の使用を余儀なくされていますが、ドキュメントによると、これは非推奨です。

--zookeeper <String: hosts>              DEPRECATED, The connection string for  
                                       the zookeeper connection in the form 
                                       host:port. Multiple hosts can be     
                                       given to allow fail-over. 

そしてもちろん、それはかなりうまくいっています:

kafka-topics --zookeeper <fqdn.of.the.server>:2181 --describe --topic <TOPIC-NAME>
Topic:<TOPIC-NAME>  PartitionCount:3    ReplicationFactor:2 
Configs:
Topic: <TOPIC-NAME> Partition: 0    Leader: <ID-3>      Replicas: <ID-3>,<ID-1> Tsr: <ID-1>,<ID-3>
Topic: <TOPIC-NAME> Partition: 1    Leader: <ID-1>      Replicas: <ID-1>,<ID-2> Isr: <ID-2>,<ID-1>
Topic: <TOPIC-NAME> Partition: 2    Leader: <ID-2>      Replicas: <ID-2>,<ID-3> Isr: <ID-2>,<ID-3>

だから、私の質問は: なぜ私は "--bootstrap-server" atm を使用できないのですか? 「zookeeper」が廃止されたため、トピックとその詳細を参照できないことが心配です...

kafka-topics には、kafka-console-consumer と同じオプション、別名「-consumer.config」が必要だと思います...

追加の精度が必要かどうかを尋ねます。

どうもありがとう、私の質問が明確で読みやすいことを願っています。

ブライイン

4

3 に答える 3

1

ブローカーを停止し、以下を実行します (サーバーに 1.5GB 以上の RAM があると仮定します)。

export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"

次に、3 つのノードすべてで Broker を起動してから試してください。

于 2019-10-03T13:27:53.970 に答える