Kafka Connect(Japanese)

12
KAFKA MEETUP JAPAN #1 ROMAN SHTYKH 株式会社サイバーエージェント Kafka Connect Writing Your Connector @rshtykh

Transcript of Kafka Connect(Japanese)

Page 1: Kafka Connect(Japanese)

K A F K A M E E T U P J A P A N # 1

R O M A N S H T Y K H

株式会社サイバーエージェント

Kafka Connect Writing Your Connector

@rshtykh

Page 2: Kafka Connect(Japanese)

Kafka Connect

“tool for scalably and reliably streaming data between Apache Kafka and other data systems”

ストリームデータをKafkaへ・からコーピーする

http://docs.confluent.io/2.0.0/connect/intro.html

http://www.confluent.io/blog/apache-kafka-0.9-is-released

Kafka 0.9+

Page 3: Kafka Connect(Japanese)

Connectors

ストリーム

オフセット付メッセージ

ミッション

パーティション入力ストリームからパーティション出力ストリームへのデータコーピー

Sink Connector

Kafkaから

Source Connector

Kafkaへ

Streams with offsets

Page 4: Kafka Connect(Japanese)

Connectors

Task

スレッド

データコーピーの処理

Connectorインスタンスにより処理が指定される

Page 5: Kafka Connect(Japanese)

Connectors

実行モード

Standalone テスト用、シンプルな処理

Distributed

From “Kafka Connect: Real-time Data Integration at Scale with Apache Kafka”

Page 6: Kafka Connect(Japanese)

Connectors

実行モード

Standalone テスト用、シンプルな処理

Distributed

From “Kafka Connect: Real-time Data Integration at Scale with Apache Kafka”

Page 7: Kafka Connect(Japanese)

Connectors

実行モード

Standalone テスト用、シンプルな処理

Distributed

From “Kafka Connect: Real-time Data Integration at Scale with Apache Kafka”

Page 8: Kafka Connect(Japanese)

Implementing Connectors

メッセージは、key-valueレコード

java.lang.String, java.lang.Integer, java.lang.Map, ..., 或いはorg.apache.kafka.connect.data.Struct

org.apache.kafka.connect.data.Schema

Kafka Connectランタイムデータ形式 byte[] org.apache.kafka.connect.storage.Converter

Schema schema = SchemaBuilder.struct().name("com.example.Person") .field("name", Schema.STRING_SCHEMA).field("age", Schema.INT32_SCHEMA).build() Struct struct = new Struct(schema).put("name", "Bobby McGee").put("age", 21)

Page 9: Kafka Connect(Japanese)

Implementing Connectors

Sink

public abstract class Connector{ public abstract String version() public void initialize(ConnectorContext ctx) public void initialize(ConnectorContext ctx, List<Map<String, String>> taskConfigs) public abstract void start(Map<String, String> props) public abstract void stop(); public void reconfigure(Map<String, String> props) public abstract ConfigDef config() public Config validate(Map<String, String> connectorConfigs) public abstract Class<? extends Task> taskClass() public abstract List<Map<String, String>> taskConfigs(int maxTasks) }

Page 10: Kafka Connect(Japanese)

Implementing Connectors

Sink

public abstract class SinkTask implements Task { abstract void start(Map<String,String> props) abstract void stop() public void initialize(SinkTaskContext context) { ... } public abstract void put(Collection<SinkRecord> records); public abstract void flush(Map<TopicPartition, Long> offsets); public void onPartitionsAssigned(Collection<TopicPartition> partitions) {} public void onPartitionsRevoked(Collection<TopicPartition> partitions) {} }

Page 11: Kafka Connect(Japanese)

Connectors

http://www.confluent.io/product/connectors

Page 12: Kafka Connect(Japanese)

Connectors

http://www.confluent.io/product/connectors 他多数