ビッグデータ テクノロジーのマクスウェル エントリー ケース スタディ

ビッグデータ テクノロジーのマクスウェル エントリー ケース スタディ


1. 前に書く

バージョン 1.3.0 は JDK8 をサポートしていません. この記事は Shang Silicon Valley の教育文書であり、個人的な学習記録が含まれています.

  • マクスウェルのバージョン:Maxwell1.2.9
  • Zookeeper のバージョン:Zookeeper3.5.7
  • カフカのバージョン:Kafka2.4.1
  • MySQL のバージョン:MySQL5.7

2. マクスウェルの使用

2.1 Maxwell のインストールと展開

テキストを見る

2.2 マクスウェル入門ケース

2.2.1 Mysql データを監視し、コンソールに出力する

  • 実装手順:

(1) maxwell を実行して mysql データの更新を監視する

[whybigdata@node01	maxwell-1.29.2]$ bin/maxwell --user='maxwell' --password='123456' --host='node01' --producer=stdout

(2) mysql の test_maxwell ライブラリのテスト テーブルにデータを挿入し、maxwell のコンソール出力を確認します。

mysql> insert into test2 values(1,'aaa');

TP

{
    
    
"database": "test_maxwell",	--库名
"table": "test",	--表名
"type": "insert",	--数据更新类型
"ts": 1637244821,	--操作时间
"xid": 8714,	    --操作 id
"commit": true, 	--提交成功
"data":  {
    
    	 		--数据
"id": 1,
"name": "aaa"
}

(3) mysql の test_maxwell ライブラリの test テーブルに 3 つのデータを同時に挿入すると、コンソールは 3 つの json ログを検出し、maxwell がデータ行単位でログを収集していることを示します。

mysql> INSERT INTO test2 VALUES(2,'bbb'),(3,'ccc'),(4,'ddd');

{"database":"test_maxwell","table":"test","type":"insert","ts"
:1637245127,"xid":9129,"xoffset":0,"data":{"id":2,"name":"bbb"
}}
{"database":"test_maxwell","table":"test","type":"insert","ts"
:1637245127,"xid":9129,"xoffset":1,"data":{"id":3,"name":"ccc"
}}
{"database":"test_maxwell","table":"test","type":"insert","ts"
:1637245127,"xid":9129,"commit":true,"data":{"id":4,"name":"dd d"}}

mysql> update test2 set name='zaijian' where id =1;

{"database":"test_maxwell","table":"test","type":"update","ts"
:1631618614,"xid":535,"commit":true,"data":{"id":1,"name":"zai jian"},"old":{"name":"nihao"}}

複数のデータを挿入し、最後に挿入されたデータのコミットステータスのみが true で、その他のデータはxoffset識別子として後ろから順に並べられます

ここに画像の説明を挿入

JSON データ

TP

(4) test_maxwell ライブラリのテスト テーブルのデータを変更し、maxwell のコンソール出力を表示します。

mysql> update test2 set name='abc' where id =1;

TP

ここに画像の説明を挿入

(5) test_maxwell ライブラリの test テーブルのデータを削除し、maxwell のコンソール出力を表示します。

mysql> DELETE FROM test2 WHERE id =1;

ここに画像の説明を挿入

表データ:

TP

JSON データ

ここに画像の説明を挿入

2.2.2 kafka への Mysql データ出力の監視

1) 実装手順:

(1) Zookeeper と kafka を起動する

[atguigu@hadoop102 bin]$ jpsall
=============== hadoop102 ===============
3511 QuorumPeerMain
4127 Kafka
=============== node02 ===============
1885 Kafka
1342 QuorumPeerMain
=============== node03 ===============
1345 QuorumPeerMain
1886 Kafka

(2) Maxwell を起動して binlog を監視する

whybigdata@node01 maxwell-1.29.2]$ bin/maxwell --user='maxwell' --password='123456'	--host='node01' --producer=kafka -- kafka.bootstrap.servers=node01:9092 --kafka_topic=maxwell

起動結果グラフ

TP

(3) kafka コンソールを開いたコンシューマーは maxwell トピックを消費します

[whybigdata@node01 ~]$ kafka-console-consumer.sh --bootstrap-server node01:9092 --topic maxwell

ここでは、OffsetExplorerツールを直接使用して、Maxwell モニタリングの結果を表示します

maxwell上記のコマンドを実行する前に、OffsetExplorer はテーマがないことを確認しました。

ここに画像の説明を挿入

下図のように、maxwellテーマが追加されていることがわかります

TP

  • データを挿入する
mysql> insert into test2 values (5,'eee');

1つはコンソールで見つけることができますerrorが、実験には影響しません.具体的な理由は明らかではありません, 下の図に示すように:

TP

maxwell件名欄確認Data、文字化けあり

TP

キーと値の値の文字化けを防ぐために、事前にproperties栏コンテンツ タイプを設定しますString。デフォルトはバイト配列です。

TP

結果を見る

TP

ビュー値: JSON 形式

TP

  • id=5 のデータを eef に変更します

ここに画像の説明を挿入

JSON データ:

TP

  • id=5 のデータを削除
    ここに画像の説明を挿入

ここに画像の説明を挿入

test2 テーブルは以前に操作されましたが、今回はデータの一部 (id=3、name=dd) が test テーブルに挿入されます。

TP

JSON データ

TP

maxwell で指定されたプロデューサは kafkaa であり、–kafka_topic=maxwell が指定されているため、maxwell ライブラリ内のすべてのテーブルの変更は maxwell トピック (パーティション 0) に表示されます。

  • 新しいライブラリ test_maxwell2 とテーブル aaa (id, name) を作成し、新しいデータ (id=1, name=qqq) を挿入します

TP

Maxwell テーマも更新され、まだパーティション 0 にあります

TP

(4) test_maxwell ライブラリのテスト テーブルに別のデータを挿入します。

注: 前回起動した Maxwell プロセスを閉じ、再度 Maxwell を起動してから、上記の SQL 挿入コマンドを実行します。

mysql> insert into test values (5,'eee');

(5) データは kafka コンシューマーを介して表示され、データが正常に kafka に送信されたことを示します。

{"database":"test_maxwell","table":"test","type":"insert","ts"
:1637245889,"xid":10155,"commit":true,"data":{"id":5,"name":"e ee"}}

2) kafkaトピックデータのパーティション制御

会社の実稼働環境では、通常、maxwell を使用して複数の mysql データベースのデータを監視し、これらのデータを kafka のトピック トピックに送信します。このトピック多分区提高并发度. したがって、これらのデータの分割をどのように制御するかが重要になります。実装手順は次のとおりです。

(1) maxwell の設定ファイルを修正し、カスタマイズして maxwell プロセスを起動する

[whybigdata@node01 maxwell-1.29.2]$ vim config.properties

# tl;dr config log_level=info
producer=kafka kafka.bootstrap.servers=node01:9092
# mysql login info 
host=node01 
user=maxwell 
password=123456


#	*** kafka ***
# list of kafka brokers #kafka.bootstrap.servers=hosta:9092,hostb:9092
# kafka topic to write to
# this can be static, e.g. 'maxwell', or dynamic, e.g. namespace_%{database}_%{table}
# in the latter case 'database' and 'table' will be replaced with the values for the row being processed kafka_topic=maxwell3


#	*** partitioning ***
# What part of the data do we partition by? #producer_partition_by=database # [database, table, primary_key, transaction_id, column] producer_partition_by=database # 控制数据分区模式,可选模式有 库名,表名,主键,列名

# specify what fields to partition by when using producer_partition_by=column
# column separated list. #producer_partition_columns=name
# when using producer_partition_by=column, partition by this when
# the specified column(s) don't exist. #producer_partition_by_fallback=database

(2) maxwell3 という名前の 3 つのパーティションを持つトピックを手動で作成します。

[whybigdata@node01 maxwell-1.29.2]$ kafka-topics.sh --zookeeper node01:2181,hadoop103:2181,hadoop104:2181/kafka --create -- replication-factor 2 --partitions 3 --topic maxwell3

注: node01:2181,node02:2181,node03:2181/kafkaZookeeper に kafka のパスを追加する必要があります/kafka。コンマの後に余分なスペースを残さないでください。そうしないと、次のエラーが発生します。

ここに画像の説明を挿入

(3) 構成ファイルを使用して、Maxwell プロセスを開始します。

[whybigdata@node01 maxwell-1.29.2]$ bin/maxwell --config ./config.properties

(4) test_maxwell ライブラリのテスト テーブルに別のデータを挿入します。

(5) kafka ツールで見ると、このデータは maxwell3 トピックの第 1 パーティションに入っています。

結果グラフ

TP

(6) テストライブラリのaaaテーブルにデータを挿入する

(7) kafka ツールで表示すると、このデータは maxwell3 テーマの No. 0 パーティションに入りました。これは、ライブラリ名がデータが入るパーティションに影響することを示しています。

ここに画像の説明を挿入

(8) test_maxwell ライブラリの test2 テーブルに再度データを挿入すると、maxwell3 トピックの 1 番目のパーティションにデータが挿入されます。

TP

2.2.3 Mysql指定のテーブルデータ出力コンソールを監視する

(1) maxwell を実行して、mysql で指定したテーブルのデータ更新を監視する

監視できるテーブルを制限します。excludeすべてのライブラリの下にあるすべてのテーブルを除外し、includetest_maxwell ライブラリの下にあるテスト テーブルのみを含めます (監視します)。

[whybigdata@node01 maxwell-1.29.2]$ bin/maxwell --user='maxwell' --password='123456' --host='node01' --filter 'exclude: *.*, include:test_maxwell.test' --producer=stdout

(2) test_maxwell.test テーブルにデータを挿入し、maxwell の監視を確認します。

mysql> insert into test_maxwell.test values(7,'ggg');

{
    "database":"test_maxwell",
    "table":"test",
    "type":"insert","ts"
    :1637247760,
    "xid":11818,
    "commit":true,
    "data":{
        "id":7,
        "name":"g gg"
    }
}

(3) test_maxwell.test2 テーブルにデータを挿入し、maxwell の監視を確認します。

mysql> insert into test1 values(1,'nihao');

今回は情報を受信して​​おらず、include パラメータが有効であることを示しており、指定された mysql テーブルの情報のみを監視できます

注: この方法で mysql ライブラリのすべてのテーブルを監視するように設定することもできますinclude:test_maxwell.*。つまり、ライブラリ全体をフィルタリングします。読者は自分でテストできます。

2.2.4 Mysql指定テーブルフルデータ出力コンソールの監視、データ初期化

初期化(ブートストラップ)公式サイトアドレス:https://maxwells-daemon.io/bootstrapping/

デフォルトでは、Maxwell プロセスは mysql binlog ログの新規および変更されたデータのみを監視できますが、Maxwell はデータの初期化をサポートしています.Maxwell のメタデータを変更して、MySQL テーブルのデータを初期化することができます.これは、完全同期と呼ばれることがよくあります. . 具体的な操作手順は次のとおりです。

TP

要件: test_maxwell ライブラリの下にある test2 テーブルの 4 つのデータすべてを、印刷用に maxwell コンソールにインポートします。

(1) Maxwell のメタデータを変更し、データ初期化メカニズムをトリガーし、mysql の maxwell ライブラリでブートストラップします。

  • 完全なデータを必要とするライブラリー名とテーブル名を指定して、データの一部をテーブルに挿入します
mysql> insert into maxwell.bootstrap(database_name,table_name) values('test_maxwell','test2');

上記のステートメントを実行する前に:

ここに画像の説明を挿入

実行後のブーストラップ テーブル:

TP

(2) maxwell プロセスを開始します。この時点で、初期化プログラムは test2 テーブル内のすべてのデータを直接出力します。

[whybigdata@node01 maxwell-1.29.2]$ bin/maxwell --user='maxwell' --password='123456' --host='node01' producer=stdout
Using kafka version: 1.0.0
23:15:38,841 WARN MaxwellMetrics - Metrics will not be exposed: metricsReportingType not configured.
23:15:39,110 INFO Maxwell - Maxwell v1.22.0 is booting (StdoutProducer), starting at Position[BinlogPosition[mysql- bin.000004:611096], lastHeartbeat=1637248429242] 23:15:39,194 INFO MysqlSavedSchema - Restoring schema id 6 (last modified at Position[BinlogPosition[mysql- bin.000004:517625], lastHeartbeat=1637246435111])
23:15:39,299 INFO MysqlSavedSchema - Restoring schema id 1 (last modified at Position[BinlogPosition[mysql- bin.000004:158612], lastHeartbeat=0])
23:15:39,342 INFO MysqlSavedSchema - beginning to play deltas...
23:15:39,343 INFO MysqlSavedSchema - played 5 deltas in 1ms
{"database":"test_maxwell","table":"test2","type":"bootstrap- start","ts":1637248539,"data":{}}
23:15:39,367 INFO SynchronousBootstrapper - bootstrapping started for test_maxwell.test2
23:15:39,369 INFO BinlogConnectorReplicator - Setting initial binlog pos to: mysql-bin.000004:611096
{"database":"test_maxwell","table":"test2","type":"bootstrap- insert","ts":1637248539,"data":{"id":1,"name":"aa"}}
{"database":"test_maxwell","table":"test2","type":"bootstrap- insert","ts":1637248539,"data":{"id":2,"name":"bb"}}
{"database":"test_maxwell","table":"test2","type":"bootstrap- insert","ts":1637248539,"data":{"id":3,"name":"cc"}}
{"database":"test_maxwell","table":"test2","type":"bootstrap- insert","ts":1637248539,"data":{"id":4,"name":"dd"}}
{"database":"test_maxwell","table":"test2","type":"bootstrap- complete","ts":1637248539,"data":{}}
23:15:39,387 INFO SynchronousBootstrapper - bootstrapping ended for #8 test_maxwell.test2
23:15:39,465 INFO BinaryLogClient - Connected to node01:3306 at mysql-bin.000004/611096 (sid:6379, cid:108) 23:15:39,465 INFO	BinlogConnectorLifecycleListener - Binlog connected.

私の実行結果:

ここに画像の説明を挿入

(3) すべてのデータが初期化されると、Maxwell のメタデータが変更されます

  • is_complete フィールドが 0 から 1 に変更されました

  • start_at フィールドが null から特定の時刻 (データ同期の開始時刻) に変更されます。

  • complete_at フィールドが null から特定の時刻 (データ同期の終了時刻) に変更されます。

TP

結果を実行します

ここに画像の説明を挿入

maxwell を閉じて再起動しても、再度初期化されません (ブーストラップ)。再度初期化する必要がある場合は、SQL を再度実行する必要があります。

maxwell.bootstrap(database_name,table_name) に挿入します values('test_maxwell','test');

TP

ブーストラップ テーブル:

TP

終了!

おすすめ

転載: blog.csdn.net/m0_52735414/article/details/128474870