2016-06-14 4 views
0

から同じMSGを取得:何が起こるnodejs-カフカノードモジュール - 私はkafa消費者作成するには、「カフカ・ノードを」ノードモジュールを使用している各パーティション

var client = new kafka.Client(ZOO_KEEPER_URL, PORTAL_CLIENT_ID); 
var topics = [ 
     { "topic" : MY_TOPIC_NAME, 
     partition: 0 
     }, 
     { "topic" : MY_TOPIC_NAME, 
     partition: 1  } 
    ]; 
var options = { 
     autoCommit: false, 
     groupId: GROUP_ID, 
     fromOffset : false 
    }; 
var consumer = new Consumer(client, topics, options); 
    consumer.on('message', function (message) { 
     console.log("New Message; offset: "+ message.offset + " Partition: "+message.partition);   
    }); 

は検索されたオフセットは同じですパーティション0から1回、パーティション1から。 私が期待したのは、ZooKeeperがバランスをとってこれを管理する方法を知っていることです。

注: ユースケースは、カフカから使用可能な任意のMSGから読んでいる - >弾性検索に足す - >カフカにコミットする(自動コミットがfalseに設定されている理由です)

答えて

1

各パーティションには、オフセット、自身を持っています異なるデータを含んでいます。したがって、パーティション0からのオフセットゼロのメッセージと、パーティション1からのオフセットゼロのメッセージを受け取った場合、それは2つの異なるメッセージです。また、コミット時には、すべてのパーティションのオフセットが独立して格納されます。

+0

あなたは本当に感謝しています。私が今理解していないのは、オフセットAPIです.- var offset = new kafka.Offset(client);を呼び出すときに得られる最も早いオフセットの関係は何ですか? –

+0

コンシューマが開始する場合、最新のコミットされたオフセットから、またはトピックの最後から、読み込みを開始する可能性が2つあります。 (パラメータ "auto.offset.reset"を参照してください)もちろん、読み込みのための位置を探すこともできます。コミットオフセットは、通常、クライアントが失敗した場合にメッセージが失われないようにするために使用します。クライアントは最新のコミットされたオフセットから再開することができます。 –

関連する問題