私は私がメッセージから特定のキーのパラメータに基づいてパーティションを割り当てるためにカスタムロジックを記述する必要がユースケースを持っています。私はこの上でいくつかの研究を行なったし、変換インタフェースの一部のメソッドをオーバーライドすることカフカ変換サポートを見つけましたが、私はgitのハブまたはどこかにいくつかのサンプルコードを実行することができませんでした。缶誰かがカフカJDBCソースコネクタでカスタムパーティションの割り当てを行うために、サンプルコードやgitのハブリンクを共有してください!
前もって感謝します!。
カフカの接続デフォルトの用途でパーティションを割り当てます:DefaultPartitioner
(org.apache.kafka.clients.producer.internals.DefaultPartitioner
)
あなたはいくつかのカスタムでデフォルト1を上書きする必要がある場合は、上書きが適用される、それは可能ですが、あなたは覚えているすべてのソースコネクタ。あなたが設定する必要があることを行うにはproducer.partitioner.class
、元のプロパティをproducer.partitioner.class=com.example.CustomPartitioner
。また、あなたはカフカ接続ライブラリとディレクトリへのあなたのパーティとのjarファイルをコピーする必要があります。
変換の方法:
パーティションを設定すると、変換も可能であるが、それは正しいアプローチではありません。Transformation
あなたのパーティションを割り当てるために重要であること、話題のメタデータへのアクセスを持っていません。
あなたがあなたの記録のためのパーティションを設定したい場合は、とにかく、コードは次のようになります。
public class AddPartition <R extends ConnectRecord<R>> implements Transformation<R> {
public static final ConfigDef CONFIG_DEF = new ConfigDef();
@Override
public void configure(Map<String, ?> props) {
final SimpleConfig config = new SimpleConfig(CONFIG_DEF, props);
}
@Override
public R apply(R record) {
return record.newRecord(record.topic(), calculatePartition(record), record.keySchema(), record.key(), record.valueSchema(), record.value(), record.timestamp());
}
private Integer calculatePartition(R record) {
// Partitions calcuation based on record information
return 0;
}
@Override
public void close() {
}
@Override
public ConfigDef config() {
return CONFIG_DEF;
}
}