kafkaシリーズ-kafkaマルチパーティションの場合、データの秩序性を保証

679 ワード

シーンmysqlのデータ-->canal-->kafka-->mysql、hiveに送信
canal統合kafkaを行う際,マルチパーティションの場合,パーティション間のデータ消費は無秩序であるという問題が発見された.
この場合、消費者側が消費する更新ログがログを挿入する前に、データの欠落によって異常が発生する(このような場合は同時発生の確率が大きくなる)ため、新規のログと更新のログが秩序正しく消費されることを保証する必要がある.
kafkaがデータを送信するのは指定したパーティションをサポートするので、この場合、同じテーブルの同じプライマリ・キーのデータを同じパーティションに送信すればよい(複数のデータベースがデータベース名を追加しなければならない場合)
パーティションの定義は次のとおりです.
private int partitionDefine(String keyToPartition) {
	if (keyToPartition == null) {
		return new Random().nextInt(numPartitions);
	} else {
		return Math.abs(keyToPartition.hashCode()) % numPartitions;
	}
}
入力パラメータtableName+プライマリ・キー
このように、消費されたデータは秩序正しくなっています.異なるシーンを活用すればよい.