2017-11-16 19 views
0

私は、単一ノードKafka V 0.10.2(16 GB RAM、8コア)と単一ノードのZookeeper V 3.4.9(4 GB RAM、1コア)を使用しています。私は64の消費者団体とそれぞれが250のパーティションを持つ500のトピックを持っています。私はKafkaブローカーとその実行中の細かいコマンドを実行することができます。 ex。kafka.admin.TopicCommand Fail

./kafka-consumer-groups.sh --bootstrapサーバはlocalhost:9092 --describe --group

しかし、私は、トピックを作成するために話題を変えるようadminコマンドを実行すると、例えば

./kafka-topics.sh --create --zookeeper:2181 --replication因子1 --partitions 1 --topic

次の例外が表示されている:

中にエラーが発生トピックコマンドを実行する:複製因子:利用可能なブローカーよりも1大きい :0 [2017年11月16日11:22:13592] ERROR org.apache.kafkaを.common.errors.InvalidReplicationFactorException: 複製因子:1利用できるブローカーより大きい:0 (kafka.admin.TopicCommand $)

私は私のブローカーがアップしてチェックします。 server.log次の警告に言及した以下

[2017-11-16 11:14:26,959] WARN Client session timed out, have not heard from server in 15843ms for sessionid 0x15aa7f586e1c061 (org.apache.zookeeper.ClientCnxn) 
[2017-11-16 11:14:28,795] WARN Unable to reconnect to ZooKeeper service, session 0x15aa7f586e1c061 has expired (org.apache.zookeeper.ClientCnxn) 
[2017-11-16 11:21:46,055] WARN Unable to reconnect to ZooKeeper service, session 0x15aa7f586e1c067 has expired (org.apache.zookeeper.ClientCnxn) 

がある私のカフカサーバの構成です:

broker.id=1 
delete.topic.enable=true 
num.network.threads=3 
num.io.threads=8 
socket.send.buffer.bytes=102400 
socket.receive.buffer.bytes=102400 
socket.request.max.bytes=104857600 
log.dirs=/kafka/data/logs 
num.partitions=1 
log.segment.bytes=1073741824 
log.retention.check.interval.ms=300000 
zookeeper.connect=<zookeeperIP>:2181 
zookeeper.connection.timeout.ms=6000 

飼育係の構成は次のとおりです。

# The number of milliseconds of each tick 
tickTime=2000 
# The number of ticks that the initial 
# synchronization phase can take 
initLimit=10 
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement 
syncLimit=5 
# the directory where the snapshot is stored. 
# do not use /tmp for storage, /tmp here is just 
# example sakes. 
dataDir=/zookeeper/data 
# the port at which the clients will connect 
clientPort=2181 
# the maximum number of client connections. 
# increase this if you need to handle more clients 
#maxClientCnxns=60 
autopurge.snapRetainCount=20 
# Purge task interval in hours 
# Set to "0" to disable auto purge feature 
autopurge.purgeInterval=48 

私はどの構成を把握することはできませんよ調整する。私が逃しているもの。何か助けていただければ幸いです。

+0

私はあなたの飼い猫の状態を教えてくれますか? /zookeeper/zookeeper-3.4.9/bin/../conf/zoo.cfg モード:この次のように出力 ZooKeeperのJMXを取得./zkServer.shステータスを実行する上で – shakeel

+0

@SHAKEELMOHAMMADはデフォルト 使用して設定で有効になってスタンドアロン – Abhimanyu

+0

@ SHAKEELMOHAMMAD以前のkafka-server.logを見ていたら、警告がいっぱいでした。 WARN開いている接続がないチャネル経由で応答を送信しようとしました。接続ID 2(kafka.network.Processor) これを解決するには? – Abhimanyu

答えて

3

あなたは

./kafka-topics.sh --create --zookeeperのように飼育係の引数を指定して、消費者を実行している:2181 --replication-因子1 --partitions 1 --topic

これは、消費者が行くと飼い主にブローカーの詳細について質問することを意味します。動物園で利用できるブローカーの詳細があれば、ブローカーに接続することができます。

あなたのシナリオでは、私は飼い猫の迷子ブローカーの詳細を失ったと思います。 zookeeperは、通常、すべての設定をツリーパスに保存します。

飼育係はあなたがこの

[controller, controller_epoch, brokers, zookeeper, admin, isr_change_notification, consumers, config] 

のような出力が表示され、その後、ls /brokers出力は次のようになりますかls /を行い接続が成功した後/bin/zkCli.sh -server localhost:2181

を使用して飼育係のシェルにログイン必要ブローカーのパスを持っているかどうかをチェックします[ids, topics, seqid]

そしてls /brokers/idsの出力は[0]になります。これはブローカーIDの配列です。配列が空の場合は、[]は、ブローカの詳細が飼い葉飼育係に存在しないことを意味します。

この場合、ブローカと飼い犬飼育係を再起動する必要があります。

を更新:

この問題は、通常は発生しません。あなたの動物園のサーバーが閉鎖している(殺している)か、ブローカーパスを自動的に失うためです。

これを克服するには、さらに2つの飼育係を維持することが、3つの飼育係ノードを完全に意味することを意味します。

ローカルホストの場合は、localhost:2181、localhost:2182、localhost:2183。

3つのインスタンスを使用するクラスタの場合zookeeper1:2181、zookeeper2:2181、zookeeper3:2181

次の2つの故障にまで耐えることができます。

./kafka-topics.sh --create --zookeeper はlocalhost:2181は、localhost:2182は、localhost:2183 --replication因子1コマンド次のトピックおよび使用を作成するため

--partitions 1 --topic

+0

説明をお寄せいただきありがとうございますが、そのような場合を防ぐために何ができるのですか、いくつかの設定を変更するか調整する必要がありますか? – Abhimanyu

+0

@Abhimanyu最新セクションをお読みください – shakeel