not be reproduced in any manner without the express written permission of Confluent, Inc. 11 final Properties settings = new Properties(); settings.put(ProducerConfig.CLIENT_ID_CONFIG, driverId); settings.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka:9092"); settings.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); settings.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, KafkaAvroSerializer.class); settings.put(KafkaAvroSerializerConfig.SCHEMA_REGISTRY_URL_CONFIG, "http://schema-registry:8081"); final KafkaProducer<String, PositionValue> producer = new KafkaProducer<>(settings); ... final ProducerRecord<String, PositionValue> record = new ProducerRecord<>(“store-order”, key, value); producer.send(record); どこにどう送るか? 何を送るか?
not be reproduced in any manner without the express written permission of Confluent, Inc. 12 final ProducerRecord<String, PositionValue> record = new ProducerRecord<>(“store-order”, key, value); 何のイベントか? イベント自体 “store-order” is a Topic Kafkaにイベントを送る上で指定する唯一の「何のイベント か」に関わる情報。 KafkaはこのTopic毎にイベントをまとめて保存する。
not be reproduced in any manner without the express written permission of Confluent, Inc. Stream と Log 14 customer login: abc order confirmed: #001 order updated: #002 customer login: efg order canceled: #003 Append-Only Immutable 1 2 3 4 5 6 8 7 10 9 11 12 1 2 3 4 5 6 8 7 Old New
not be reproduced in any manner without the express written permission of Confluent, Inc. Partition とイベント順序と並列処理 19 Eventの到達順序はPartition内でのみ保証される。 Partition数 = 最大並列 処理可能スレッド数 3 7 9 10 11 16 17 1 2 12 18 22 4 5 6 13 14 15 20 19 21 8
not be reproduced in any manner without the express written permission of Confluent, Inc. Chess Game Play and Chessboard 23 “Streams and Tables in Apache Kafka: A Primer”, Michael Noll, Confluent Blog. チェスの一手一手とチェス盤の状態は 同じデータの異なる表現方法。 • チェス盤はある特定時点での完全な 状態 (State) を表現できる。 • チェスの一手一手を漏れなく、順序 通り適用すればチェス盤の状態を再 現できる。
not be reproduced in any manner without the express written permission of Confluent, Inc. Relational Database Internals 24 処理は全てメモリ上でなされる。 処理に必要なデータはメモリに読み込ま れる。処理後更新されたデータは定期的 にストレージと同期される。 処理はログとして記録される。 障害発生時、ストレージへの同期が未完 の処理を漏れなく順序通り実行すること でデータを復元する。 fsync buffer load
not be reproduced in any manner without the express written permission of Confluent, Inc. Database Replication 25 DBのレプリケーション: • PrimaryからSecondaryにログ を漏れなく順序通り渡す • Secondaryにてログを漏れなく 順序通り処理する “Postgres Replication and Automatic Failover Tutorial”, Abbas Butt, EDB.
not be reproduced in any manner without the express written permission of Confluent, Inc. Change Data Capture 26 データソースの更新情報をストリーム化し: • 部分的なデータのみ • 異なるスキーマへ • 異なるストレージへ • 恒久的なストレージへ 漏れなく順序通り処理し渡すことによりデー タの整合性を保ちつつ同期する。 The DB
not be reproduced in any manner without the express written permission of Confluent, Inc. Stream-Table Duality 28 Stream (facts) Table (dims) alice Berlin bob Lima alice Berlin alice Rome bob Lima alice Paris bob Sydney alice Berlin alice Rome bob Lima alice Paris bob Sydney 更新情報StreamからTableの状態を再現 更新情報StreamからTableの状態を常に 最新状態に維持 StreamとTableは同じデータを表現する双対関係 Stream-Table Duality (双対性)
not be reproduced in any manner without the express written permission of Confluent, Inc. 31 Apache Kafka ksqlDB kafka.apache.org ksqldb.io Apache Software Foundation Confluent Inc. Apache License 2.0 Confluent Community License github.com/apache/kafka github.com/confluentinc/ksql Free Free Storage Process
not be reproduced in any manner without the express written permission of Confluent, Inc. 33 Apache Kafkaをベースとしたストリーム処理 DB CONNECTOR CONNECTOR APP APP DB STREAM PROCESSING CONNECTOR APP DB
not be reproduced in any manner without the express written permission of Confluent, Inc. 35 Apache Kafkaとの接続 - データのin/out DB CONNECTOR CONNECTOR APP APP DB STREAM PROCESSING CONNECTOR APP DB
not be reproduced in any manner without the express written permission of Confluent, Inc. 36 ストリーム処理 - ランタイムとそれを支える基盤 DB CONNECTOR CONNECTOR APP APP DB STREAM PROCESSING CONNECTOR APP DB
not be reproduced in any manner without the express written permission of Confluent, Inc. 37 ksqlDB Abstraction DB APP APP DB PULL PUSH CONNECTORS STREAM PROCESSING MATERIALIZED VIEWS ksqlDB APP
not be reproduced in any manner without the express written permission of Confluent, Inc. Kafka Streams / ksqlDB - 異なる抽象化レイヤー 39 ksqlDB Kafka Streams Kafka Connect Producer Consumer Producer/Consumer、Kafka Streams、ksqlDBは独立した技 術ではなく同じスタックの異な る抽象化レイヤーを構成。 Kafka Streamsは Producer/Consumerを利用し、 ksqlDBは内部でKafka Streams プロセスを実行している。
not be reproduced in any manner without the express written permission of Confluent, Inc. コードで見る Kafka Streams と ksqlDB 40 ConsumerRecords<String, String> records = consumer.poll(100); Map<String, Integer> counts = new DefaultMap<String, Integer>(); for (ConsumerRecord<String, Integer> record : records) { String key = record.key(); int c = counts.get(key) c += record.value() counts.put(key, c) } for (Map.Entry<String, Integer> entry : counts.entrySet()) { int stateCount; int attempts; while (attempts++ < MAX_RETRIES) { try { stateCount = stateStore.getValue(entry.getKey()) stateStore.setValue(entry.getKey(), entry.getValue() + stateCount) break; } catch (StateStoreException e) { RetryUtils.backoff(attempts); } } } builder.stream("input-stream", Consumed.with(Serdes.String(), Serdes.String())) .groupBy((key, value) -> value) .count() .toStream() .to("counts", Produced.with(Serdes.String(), Serdes.Long())); SELECT x, count(*) FROM stream GROUP BY x EMIT CHANGES; Consumer Kafka Streams ksqlDB
not be reproduced in any manner without the express written permission of Confluent, Inc. Kafka Streams / ksqlDB - 異なる抽象化レイヤー 41 ksqlDB Kafka Streams Producer Consumer • Stateless / Stateful • Java or pseudo-SQL • Stateless • Many Languages Kafka StreamがTopologyと ステート管理の機能を提 供。この為集約(SUM、 AVG)等の処理が可能であ り、提供言語がJavaのみと なる。 ksqlDBは擬似SQLでの利用 となるが、内部的にはKafka Stream処理に変換される為 中身はJava。
not be reproduced in any manner without the express written permission of Confluent, Inc. Kafka Streams - Topology and State Store 43 Kafka Streams内で処理フローを管理。 状態は内部のDB (!) で管理。 (RocksDB)
not be reproduced in any manner without the express written permission of Confluent, Inc. Kafka Streams - Middleware in Library 44 Karka StreamsはJavaライブラリ。一般的には専 用のランタイム構成が必要なストリーム処理をア プリ内で完結。 • StreamもしくはTableとしてデータを抽象化。 • Partition毎に処理。処理を分けるのではなく 対象データセットを分ける事で並列処理。 • Topology内を流れるのは常に1イベント。 Karka Stream Appは「分散処理オーケストレー ション」が可能なJava App。
not be reproduced in any manner without the express written permission of Confluent, Inc. by Courtesy of... 47 Michael Drogalis Principal Product Manager of Confluent @MichaelDrogalis developer.confluent.io Thank you, Michael!
not be reproduced in any manner without the express written permission of Confluent, Inc. Database Inside Out 50 fsync buffer load 1 2 3 4 5 6 8 7 10 9 11 12 1 2 3 4 5 6 8 7 Storage Tables Materialized Views Query Engine
not be reproduced in any manner without the express written permission of Confluent, Inc. Hello! My Name is: 52 創業: 2014 CEO: Jay Kreps 日本オフィス2021年開設 Engineers@Japan Office Ayumu Aizawa Solutions Engineer Shinichi Hashitani Solutions Engineer Keigo Suda Solutions Architect TBD Support Engineer 今後のKafkaコミュニティに 対する活動に向けた参考とな ります。 お手数ですが是非アンケート のご回答をお願い致します!
not be reproduced in any manner without the express written permission of Confluent, Inc. Free Stuff! 53 I ♥ Logs by Jay Kreps eBook (pdf) 今後のKafkaコミュニティに 対する活動に向けた参考とな ります。 お手数ですが是非アンケート のご回答をお願い致します! Mastering Kafka Streams and ksqlDB by Mitch Seymour eBook (pdf) 200 USD Credit for 3 months! http://cnfl.io/mu-try-cloud