Hadoopの生態--Kafka

分散ストリーム処理プラットフォーム、分散型メッセージングミドルウェアシステム。

、JMS

1. JMSは何ですか
Javaのメッセージサービス(Javaのメッセージサービス):Javaプログラムが非同期サービスが使用するメッセージを送信する必要があります。
異種システム間の通信に使用されます。
ミドルウェア、ミドルウェア、中間部材との間の相互作用を介して、情報サービス提供が完了し、生産者と消費者の部材との間の他のそれぞれ、
 
図3に示すように、あなたはJavaのメッセージングを使用することができますか?
:(1)異種システム統合、既存のリソースの統合、リソース使用率を向上させます
       (2)、非同期要求を処理ボトルネックを軽減または排除し、ユーザーの生産性やシステムの全体的なスケーラビリティを向上させます
       (3)アセンブリは、システムの高い柔軟性を分離します
 
4、二つのモデルメッセージング
異なるメッセージ・システムは、異なるメッセージルーティングモードを提供する2つの共通の目的地があります。キューとトピック
点モデル(点-2-パイント<P2P>)
このモデルに関わる役割:送信者、受信者、メッセージキュー(リモート・キュー)
同期および非同期クライアントは、キュー(待ち行列)仮想チャネルを送信するメッセージを受信するために、キューに送信されたメッセージは、メッセージのみコンシューマを処理することができ、消費者が複数存在する場合でも、受信機によって受信することができます。生産者と消費者の間には依存性は、生産者は単にリモートメッセージキューをスローする必要はありません。消費者は、キューからメッセージを取得し、そのキューのメッセージのみが破壊されるとき、消費者またはタイムアウト。
 
パブリッシュ/サブスクライブ・モデルを(/ Subsrcibe <パブ/サブ>公開)
このロールモデル関​​与:発行者、加入者、話題のトピック(テンプレートキュー+ダイナミックキュー)
仮想チャネルクライアントが名前のテーマ(トピック)にメッセージを送信し、消費者の話題に各サブスクライブは、各メッセージのコピーを受信します。
消費者の複数に対応する生産者、消費の複数回とすることができる、すなわちメッセージ。
生産者はニュースを生成するために、デフォルトでは、消費者がトピックを投稿、加入者は聞くためにオンラインである必要がありますすなわち、消費者がオンラインでなければなりません。
消費者のテーマに連結された時間のサブスクリプションモデルに到達するために、JMSは、加入者の消費やメッセージタイムアウトに永続サブスクリプション、特定の加入者のためのメッセージ、トピックキャッシュを提供します。
 
キュー:唯一の消費者、P2Pモード(ポイントツーポイント)は、メッセージは1つのコンシューマのみで来ます
トピック:公開とモデル(パブ - サブ、テーマ)、トピック、より多くの消費者のニュースに送信されたメッセージをサブスクライブ

二、kafaka

2-1いくつかの概念

消費者//メッセージコンシューマ            
コンシューマ・グループのコンシューマ・グループ//
ブローカーカフカサーバ、カフカサーバ
トピック//テーマ、部数、パーティション
パーティションは、//テーマが複数のパーティションに分割することができます。
ZK、飼育係//のHadoop namenoade + RM HAによって調整カフカクラスタ| HBaseの|カフカ
 
(1) ブローカー :メッセージングミドルウェア処理ノード、ノードがブローカーカフカで、一つ以上のブローカクラスタはカフカで構成することができる;
(2) トピック :例えばようなメッセージのセットの抽象的なテーマ分類、ログページビューログインして、そのトピックの形で抽象的カテゴリに分けることができます。物理的には、トピック別のメッセージは、論理的にメッセージしばらくメッセージに格納されているトピックが、ユーザーが唯一のブローカーに格納されたデータの一つ以上のデータを気にしないように生産者や消費者にトピックを指定する必要が、別々に保存HEで;
(3) パーティション :各被験者は、1つのまたは複数のパーティション(パーティション)に分割されています。「 - 」は、各パーティションは、ローカルディスク上のフォルダに対応する、ルールに名前を付けるパーティションは、次にサブジェクト名であり、コネクタ、およびゼロからパーティションの合計数に分割数、分割数が続くマイナス-1;
(4) logsegmentの :当たりlogsegmentのは、特定のログ・ファイル(「.logに」データファイル)に対応し、論理的な概念であり、かつ、パーティションがセグメントログ(logsegmentの)組成の複数に分割され、ログ・セグメントは、最小単位のスライスカフカログオブジェクトであります2つのインデックスファイル(「.INDEX」と「.timeindex」、それぞれ、オフセットインデックスファイルメッセージのタイムスタンプのインデックスファイル);
(5) オフセット :各パーティションは一連順序付け、不変組成メッセージに構成され、これらのメッセージを順次パーティションに追加されます。各メッセージは、メッセージを一意にパーティションのオフセット連続offset-として知られているシーケンス番号を識別している(ディスク上の物理的な場所を示していないメッセージ);
6) メッセージ :メッセージがカフカに格納されています最小の基本単位、つまり、ログをコミットし、固定長からなるメッセージヘッダと可変長メッセージ本体と
参考----- ------
出典:ジェーン・ブック
著者:マンマニア
リンクします。https://www.jianshu.com/p/3e54a5a39683

2-2カフカの使用シナリオ:

2つのシステムは、缶カフカミドルウェアクリッピングとして、生産者と消費者の間で大きな違いの高速データならば、通信する必要があります。
 
- ログコレクション:会社はその上の例のHadoop、HBaseの、Solrのとするために、カフカにより、消費者のさまざまなサービスに統一されたインターフェイスへの道を開くために、さまざまなサービスをログカフカによって収集することができます。
- メッセージング:ようにデカップリングし、生産者と消費者、キャッシュメッセージと。
- ユーザアクティビティの追跡:カフカは、多くの場合、そのような情報は、トピックカフカ各サーバーに公開されたWebブラウジング、検索、クリックやその他の活動など、ユーザーのウェブユーザーやアプリの活動を記録するために使用して、これらの加入者に加入することにより、オフライン解析とマイニングを行うためのリアルタイム監視および分析話題行うため、またはHadoopのにロードされ、データウェアハウス。
- 運用評価指標:カフカもしばしば稼働監視データを記録するために使用されます。このようなアラームおよびレポートなどの分散アプリケーション、濃縮フィードバック動作の産生を含む様々なデータを収集します。
- ストリーミング:なスパークストリーミングや嵐など
- イベントソース

第三に、展開と使用

3-1ダウンロード、解凍は、クラスタ上のすべてのマシンを置きます。
3-2配置$ kafka_home /設定/ server.properties:
その上broker.id log.dirのzookeeper.connectとを変更します。<参考: https://blog.csdn.net/lizhitao/article/details/25667831>
3-3スタートカフカ
ディレクトリにカフカ、コマンドを入力します。
 
テーマを作成します。
./kafka-topics。SH --create --zookeeperはlocalhost:2181は、localhost:2182は、localhost:2183 --replication因子1 --partitions 1 --topic TEST1
ビューのトピック:
./kafka-topics。SH --list --zookeeperはlocalhost:2181、localhostを:2182、localhostを:2183

四、JavaのAPI

https://www.cnblogs.com/zhangchao0515/p/9502843.html

4-1プロデューサー

 

4-2消費者

消息消费者
 --------------------
     / ** 
     *消费者
     * / 
    @Test 
    公共 無効testConumser(){
         //
         プロパティの小道具= 新しいプロパティ(); 
        props.put( "zookeeper.connect"、 "S202:2181" ); 
        props.put( "group.id"、 "G3" ); 
        props.put( "zookeeper.session.timeout.ms"、 "500" )。
        props.put( "zookeeper.sync.time.ms"、 "250" )。
        props.put( "auto.commit.interval.ms"、 "1000" ); 
        小道具。// 创建消费者配置对象 
        ConsumerConfig設定= 新しいConsumerConfig(小道具)。
        //
         地図<文字列、整数>マップ= 新しい HashMapの<文字列、整数> (); 
        map.put( "TEST3"、新しい整数(1 )); 
        地図 <文字列、リスト<KafkaStream < バイト []、バイト [] >>>のMSG = Consumer.createJavaConsumerConnector(新しいConsumerConfig(小道具))createMessageStreams(マップ)。
        リスト <KafkaStream < バイト []、バイト [] >> msgList = msgs.get( "TEST3" )。
        バイト []、バイト []> ストリーム:msgList){ 
            ConsumerIterator < バイト []、バイト []>それは= (stream.iterator)を、
            一方、(it.hasNext()){
                 バイト []メッセージ= it.next()メッセージ()。
                System.out.println(新しい文字列(メッセージ)); 
            } 
        } 
    }

 

 

 
 
消息消费者
-------------------- 
    / ** 
     *消费者
     * / 
    @Test 
    ます。public void testConumser(){ 
        // 
        プロパティの小道具=新しいプロパティ(); 
        props.put( "zookeeper.connect"、 "S202:2181"); 
        props.put( "group.id"、 "G3"); 
        props.put( "zookeeper.session.timeout.ms"、 "500")。
        props.put( "zookeeper.sync.time.ms"、 "250")。
        props.put( "auto.commit.interval.ms"、 "1000"); 
        props.put( "auto.offset.reset"、 "最小")。
        //创建消费者配置对象
        ConsumerConfig設定=新しいConsumerConfig(小道具)。
        map.put( "TEST3"、新しい整数(1)); 
        地図<文字列、リスト<KafkaStream <バイト[]、バイト[] >>>のMSG = Consumer.createJavaConsumerConnector(新しいConsumerConfig(小道具))createMessageStreams(マップ)。
        リスト<KafkaStream <[]バイト、バイト[] >> msgList = msgs.get( "TEST3")。
        (KafkaStream <バイト[]、バイト[]>ストリーム:msgList)用{ 
            ConsumerIterator <バイト[]、バイト[]>それは(stream.iteratorを=)。
            一方、(it.hasNext()){ 
                バイト[]メッセージ= it.next()メッセージ()。
                System.out.println(新しい文字列(メッセージ)); 
            } 
        } 
    }

おすすめ

転載: www.cnblogs.com/Jing-Wang/p/10953048.html