Kafkaの概要とそのインストールと展開

概要概要

予備知識(メッセージキューを理解する)

コンセプト
メッセージキュー、英語名:メッセージキュー。多くの場合、MQと略されます。文字通り理解されるように、メッセージキューはメッセージを格納するために使用されるキューです。

メッセージキューミドルウェア
メッセージキューミドルウェアは、メッセージを保存するために使用されるソフトウェア(コンポーネント)です。

例:
ウェブサイトのユーザーの行動を分析するには、ユーザーのアクセスログを記録する必要があります。
これらのログはメッセージの一部と見なすことができ、メッセージキューに保存できます。
将来、一部のアプリケーションはこれらのログを処理する必要があり、これらのメッセージはいつでも処理のために取り出される可能性があります。

メッセージキューのアプリケーションシナリオ

  1. 非同期処理
    ここに画像の説明を挿入

電子商取引のウェブサイトでは、新規ユーザーが登録するときに、ユーザーの情報をデータベースに保存すると同時に、登録の追加の電子メール通知とSMS登録コードをユーザーに送信する必要があります。
ただし、メールの送信や登録のショートメッセージの送信は外部サーバーに接続する必要があるため、さらにしばらく待つ必要があります。このとき、メッセージキューを非同期処理に使用して高速応答を実現できます。

  1. システムデカップリング
    ここに画像の説明を挿入
  2. トラフィックのピーク
    ここに画像の説明を挿入
  3. ログ処理(ビッグデータの分野で一般的)
    ここに画像の説明を挿入
    大規模なeコマースWebサイト(淘宝網、Jingdong、Gome、Suning ...)、アプリ(Tik Tok、Meituan、Didiなど)は、ユーザーの行動を分析し、ユーザーを発見する必要がありますユーザーアクセスの動作に基づいて、の設定とアクティビティは、ページ上で多くのユーザーアクセス情報を収集する必要があります。

インタラクションモデル

  1. 要求応答モデル
  • httpリクエストレスポンスモデル
    ここに画像の説明を挿入
  • データベース要求応答モデル
    ここに画像の説明を挿入
  1. 生産者、消費者モデル
    ここに画像の説明を挿入

注意:

  1. Kafkaはこの相互作用モデルに基づいています
  2. したがって、Kafkaを使用するときは、どちらがプロデューサーでどちらがコンシューマーであるかを知る必要があります。

メッセージキューの2つのモデル

  1. ポイントツーポイントモデル
    ここに画像の説明を挿入

メッセージ送信者はメッセージを生成してメッセージキューに送信し、メッセージ受信者はメッセージをメッセージキューから取り出してメッセージを消費します。
メッセージが消費された後、メッセージキューにはストレージがなくなるため、メッセージ受信者がすでに消費されたメッセージを消費することはできません。

特徴:

  • 1対1:各メッセージには受信者(コンシューマー)が1つだけあります(つまり、メッセージが消費されると、メッセージはメッセージキューに存在しなくなります)
  • 依存関係なし:送信者と受信者の間に依存関係はありません。送信者がメッセージを送信した後、受信者が実行されているかどうかに関係なく、送信者の次に送信されるメッセージには影響しません。
  • フィードバックの受信:メッセージキューが現在受信しているメッセージを削除できるように、受信者はメッセージを正常に受信した後、キューに正常に応答する必要があります。
  1. モデルのパブリッシュおよびサブスクライブ

ここに画像の説明を挿入
特徴:

  • 1対多:各メッセージには複数のサブスクライバーを含めることができます。
  • 依存:パブリッシャーとサブスクライバーの間には時間依存性があります。トピック(トピック)のサブスクライバーの場合、パブリッシャーのメッセージを消費する前にサブスクライバーを作成する必要があります。
  • 事前にサブスクライブする:メッセージを消費するには、サブスクライバーはロールトピックを事前にサブスクライブし、オンラインで実行し続ける必要があります。

カフカの基本的な概要

概念
カフカであるとサブスクリプション・パブリッシングモデルに基づく分散メッセージキューイングシステムの高スループット高い性能高い並行性高信頼性、

  1. 高スループット:HDFSの代わりに分散ディスクストレージが使用されます
  2. 高性能:リアルタイムでデータの読み取りと書き込み
  • 分散メモリが使用され、PageCacheが使用されます:オペレーティングシステムのページキャッシュメカニズム
  • オペレーティングシステムレベルのメモリに属します。Kafkaプロセスが失敗してKafkaが再起動されても、データはメモリに残ります。
  1. 高い同時実行性:分散並列読み取りおよび書き込み
  2. 高い信頼性:分散型マスタースレーブアーキテクチャ
  3. 高いセキュリティ:
  • メモリ:ログ記録操作
  • ディスク:コピーメカニズム

アプリケーションシナリオ

  • ビッグデータのリアルタイムアーキテクチャでは、リアルタイムデータの一時的な保存に使用されます

ここに画像の説明を挿入

上の写真では、次のことがわかります。

  • プロデューサー:メッセージデータをKafkaクラスターに配置するアプリケーションは多数あります。
  • コンシューマー:Kafkaクラスターからメッセージデータをプルするアプリケーションは多数存在する可能性があります。
  • コネクタ(コネクタ):Kafkaのコネクタは、データベースからKafkaにデータをインポートでき、KafkaからKafkaにデータをエクスポートすることもできます。
  • ストリームプロセッサ:ストリームプロセッサは、Kafkaからデータをプルしたり、Kafkaにデータを書き込んだりできます。

インストールと展開

  1. Kafkaインストールパッケージを仮想マシンにアップロードして解凍します
cd /export/soft/
tar -zxvf kafka_2.12-2.4.1.tgz -C ../server/
  1. server.propertiesを変更します
cd /export/server/kafka_2.12-2.4.1/config
vim server.properties

添加以下内容:
# 指定broker的id
broker.id=0

# 指定Kafka数据的位置
log.dirs=/export/server/kafka_2.12-2.4.1/data

# 配置zk的三个节点
zookeeper.connect=node1:2181,node2:2181,node3:2181
  1. インストールされたkafkaを他の2つのサーバーにコピーします
cd /export/server
scp -r kafka_2.12-2.4.1/ node2:$PWD
scp -r kafka_2.12-2.4.1/ node3:$PWD

修改另外两个节点的broker.id分别为1和2:
---------node2--------------
cd /export/server/kafka_2.12-2.4.1/config
vim server.properties
broker.id=1

--------node3--------------
cd /export/server/kafka_2.12-2.4.1/config
vim server.properties
broker.id=2

  1. KAFKA_HOME環境変数を構成します
vi /etc/profile
export KAFKA_HOME=/export/server/kafka_2.12-2.4.1
export PATH=:$PATH:${KAFKA_HOME}

分发到各个节点
scp /etc/profile node2:$PWD
scp /etc/profile node3:$PWD
每个节点加载环境变量
source /etc/profile
  1. サーバーを起動します
# 启动ZooKeeper
/export/server/zookeeper-3.4.6/bin/start-zk-all.sh

# 启动Kafka
cd /export/server/kafka_2.12-2.4.1
nohup bin/kafka-server-start.sh config/server.properties &

# 测试Kafka集群是否启动成功
bin/kafka-topics.sh --bootstrap-server node1:9092 --list

ここに画像の説明を挿入
エラーは報告されません。これは、Kafkaクラスターが正常に開始されたことを示しています。

Kafkaのワンクリック起動/シャットダウンスクリプトを構成する

  1. 実行スクリプトディレクトリに入る
cd /export/server/kafka_2.12-2.4.1/bin/
vim slave
  1. スレーブ構成ファイルを作成して、開始するノードでkafkaを保存します
node1
node2
node3
  1. start-kafka.shスクリプトを書く
vim start-kafka.sh

添加以下内容:
cat /export/server/kafka_2.12-2.4.1/bin/slave | while read line
do
{
    
    
 echo $line
 ssh $line "source /etc/profile;export JMX_PORT=9988;nohup ${KAFKA_HOME}/bin/kafka-server-start.sh ${KAFKA_HOME}/config/server.properties >/dev/nul* 2>&1 & "
}&
wait
done
  1. stop-kafka.shスクリプトを書く
vim stop-kafka.sh

添加以下内容:
cat /export/server/kafka_2.12-2.4.1/bin/slave | while read line
do
{
    
    
 echo $line
 ssh $line "source /etc/profile;jps |grep Kafka |cut -d' ' -f1 |xargs kill -s 9"
}&
wait
done
  1. start-kafka.shおよびstop-kafka.shの実行権限を構成します
chmod u+x start-kafka.sh
chmod u+x stop-kafka.sh
  1. ワンキーの起動とシャットダウンを実行します
./start-kafka.sh
./stop-kafka.sh

Kafkaソフトウェアのディレクトリ構造

ここに画像の説明を挿入

基本操作

  1. トピックの作成
    Kafkaのすべてのメッセージはトピックに保存されます。Kafkaへのメッセージを作成するには、最初に特定のトピックが必要です。
# 创建名为test的主题
bin/kafka-topics.sh \
--create \
--bootstrap-server node1:9092 \
--topic test

# 查看目前Kafka中的所有主题
bin/kafka-topics.sh \
--list \
--bootstrap-server node1:9092

テストトピックの詳細を表示する

bin/kafka-topics.sh \
--bootstrap-server node1:9092 \
--describe \
--topic test

ここに画像の説明を挿入
最初の行:テストテーマのすべてのパーティションの概要

PartitionCount:トピック内のパーティションの総数をカウントします。この図は、テストにパーティションがあることを示しています
。ReplicationFactor:トピック内のパーティションコピーの数をカウントします。この図は、test。
セグメントにパーティションのコピーがあることを示しています。.bytes:セグメントファイルのサイズを表します

2行目から:

パーティション:パーティション番号、0は最初のパーティションを
表しますリーダー:どのマシンでの読み取りと書き込みを担当する現在のパーティションを表しますか、2は3番目のマシンを表します(0から始まり、2は3番目のブローカーを
表しますレプリカ:現在のマシンを表しますパーティションレプリカ、2は3番目のマシン
Isrを表します:レプリカが同期されたノードのセット

被験者を削除する

bin/kafka-topics.sh \
--delete \
--topic test
  1. Kafkaへのメッセージを生成するには、
    Kafkaの組み込みテストプログラムを使用して、Kafkaのテストトピックへのメッセージを生成します。
bin/kafka-console-producer.sh \
--broker-list node1:9092 \
--topic test
  1. Kafkaからのメッセージを消費する
    node1のシェルウィンドウをコピーし
    、次のコマンドを使用して、テストトピックのメッセージを消費します。
bin/kafka-console-consumer.sh \
--bootstrap-server node1:9092 \
--topic test \
--from-beginning

送信:
ここに画像の説明を挿入
受信:
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/zh2475855601/article/details/115215310