SlideShare a Scribd company logo
Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved
Neo4j Stream, [RDB/NoSQL]Kafka Connector
CDC(Change Data Captuer)の紹介
2019/12/06
CREATIONLINE,INC.
李 昌桓(LEE CHANGHWAN)
1
Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved
設立
• 2006年1月
BP含めて130人ぐらい
事業概要
• クラウドインテグレーション事業
• ioTビックデータ分析事業
• DevOps関連サービス事業
• サブスクリプション販売&サポート
クリエーションラインのホームページ
• https://www.creationline.com
クリエーションライン株式会社
2
Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved
自己紹介
李 昌桓 (LEE CHANGHWAN,@awk256)
データベースが大好きなサーバサイドのエンジニア。NoSQLを中核とした「ビックデータ処理基盤のアーキテクト」として活
動している。
クリエーションライン www.creationline.com
Neo4jユーザーグループ jp-neo4j-usersgroup.connpass.com
[ブログ]
www.creationline.com/lab/neo4j
www.qiita.com/aw256
[著書]
「グラフデータベースNeo4j」の他
www.amazon.co.jp/李昌桓/e/B004LWEKOU
3
Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved
はじめに
• 一般的にオペレーションデータはRDB又はNoSQLに格納
• RDB/NoSQLからGraph DBへネットワーク状のデータを展開
– 差分データの反映方法は?
– 適切なコストで実装できるか?
4
RDB/NoSQL
データの同期方法は?
$$
https://neo4j.com/product/
Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved
従来のETLの限界
5
RDB/NoSQL
neo4j-etl
neo4j-import
load csv
bolt-driver
NEO4Jが提供しているETL(Extract抽出 Transform変換 Loadロード)では、差分処理が困難
• neo4j-etl/neo4j-import
– 初期データのマイグレーション
– 1回限り
• load-csv/bolt-driver
– 繰り返し上書きできるが
– ソースデータからの差分抽出はNG
抽出 ロード
一回限り、差分処理困難
Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved
Neo4j Stream(October 1, 2019)
6
• Neo4j Streams Cypher Prcedure(Kafka ⇔ Neo4j) #Neo4jがサポート
– Neo4j ProcedureでProducer/Consumer(Pub/Sub)を実装
• Neo4j Streams Consumer(Kafka to Neo4j) #Neo4jがサポート
– Kafka Brokerに入って来たメッセージ(JSON)をNeo4jに反映
• Neo4j Streams Producer(Neo4j to Kafka) #Neo4jがサポート
– Neo4jのCUD(Create/Update/Delete) をキャッチャーしてKafka Borkerに投げ込む(Change Data Capture:CDC)
• Kafka Connect worker(Kafka to Neo4j) #Confluentがサポート
– Kafka Connector Neo4j(Consumer)
https://neo4j.com/press-releases/neo4j-streams-kafta-confluent/
RDB/NoSQL
こちらの差分処理に
は触れておらず、、
Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved
Stream Processとは
7
Application
Publish
• Twitterのように連続的、又は非連続的に流れるデータを受け渡しするPF
Application
Subscribe
ソースからテキストタイプの
文字列(メッセージ)を受け取り、
連続してBrokerのTopicに取り込む
(JSON/CSV/KeyValue)
Broker
Topic
BrokerのTopicからFIFO
でメッセージを取り出し、
望みの処理を実行する
Source Target
Topicは論理的なデータ
の格納空間でDBで言えば、
Table各のもの
✓ AWS Kinesis
✓ GCP Pub/Sub
✓ Azure Data BUS
✓ Apache Kafka
Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved
Neo4j Streamのインストール
導入が簡単!
• Neo4j Plugin
– $NEO4J_HOME/plugins/neo4j-streams-3.5.4.jar
– https://github.com/neo4j-contrib/neo4j-streams/releases/tag/3.5.4
• Neo4j.conf
– kafka.zookeeper.connect=localhost:2181
– kafka.bootstrap.servers=localhost:9092
Kafka Serverは、別途インストール要!
8
https://neo4j.com/docs/labs/neo4j-streams/current/introduction/
Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved
Neo4j Streams Cypher Procedure #Neo4jがサポート
• neo4j.conf
– streams.procedures.enabled=<true/false, default=true>
• Cypher Procedureとしてコーディング
– CALL streams.publish('my-topic', 'Hello World from Neo4j!’)
– {"payload":"Hello world from Neo4j!"} #Kafkaからこのように読み取れる
– CALL streams.consume('my-topic', {<config>}) YIELD event RETURN event
9
stream-
publish
stream-
consume
Source Connection
差分捕獲・受け渡し
Sink Connection
受け渡し・差分更新
Kafka Broker
https://neo4j.com/docs/labs/neo4j-streams/current/procedures/
Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved
Neo4j Streams Producer(Publish, CDC) #Neo4jがサポート
• Neo4jの変更データを捕獲し、Kafkaに投げる(Change Data Capture:CDC)
– Node Pattern→ Label{*};Label1{prop1, prop2};Label3{-prop1,-prop2}
– Relationship Pattern → KNOWS{*};MEET{prop1, prop2};ANSWER{-prop1,-prop2}
10
Producer
Source Connection
差分捕獲・受け渡し
Consumerの実装は
Neo4j Streams Consumer or
Kafka Connetor Neo4j or
Kafka Connector JDBC
https://neo4j.com/docs/labs/neo4j-streams/current/producer/
Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved
Change Data Captuer Setting
• neo4j.conf
kafka.zookeeper.connect=localhost:2181
kafka.bootstrap.servers=localhost:9092
kafka.acks=1
kafka.num.partitions=1
kafka.retries=2
kafka.batch.size=16384
kafka.buffer.memory=33554432
kafka.reindex.batch.size=1000
kafka.session.timeout.ms=15000
kafka.connection.timeout.ms=10000
kafka.replication=1
kafka.linger.ms=1
kafka.transactional.id=
streams.source.topic.nodes.my-topic=Label{*};Label1{prop1, prop2};Label3{-prop1,-prop2}
streams.source.topic.relationships.my-topic=KNOWS{*};MEET{prop1, prop2};ANSWER{-prop1,-prop2}
streams.source.enabled=<true/false, default=true>
streams.source.schema.polling.interval=<MILLIS, the polling interval for getting the schema information>
11
この設定に当てはまる
パターンをフィルター
Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved
Change Data Captuer Setting 続き
{
"meta": {
"timestamp": 1532597182604,
"username": "neo4j",
"tx_id": 3,
"tx_event_id": 0,
"tx_events_count": 2,
"operation": "created",
"source": {
"hostname": "neo4j.mycompany.com"
}
},
"payload": {
"id": "1004",
"type": "node",
"after": {
"labels": ["Person"],
"properties": {
"email": "annek@noanswer.org",
"last_name": "Kretchmar",
"first_name": "Anne Marie"
}
}
},
"schema": {
"properties": {
"last_name": "String",
"email": "String",
"first_name": "String"
},
"constraints": [{
"label": "Person",
"properties": ["first_name", "last_name"],
"type": "UNIQUE"
}]
}
} 12
"payload": {
"id": "1004",
"type": "node",
"before": {
"labels": ["Person", "Tmp"],
"properties": {
"email": "annek@noanswer.org",
"last_name": "Kretchmar",
"first_name": "Anne"
}
}
}
捕獲されたデータの例 PayloadデータをKafka
Borkerに投げる
Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved
Neo4j Streams Consumer(Subscribe) #Neo4jがサポート
• Cypher Template Type
– neo4j.confに設定されているCypherのTemplateに、JSON形式のKafka Messageを食べさせて実行
– Cypherとデータは別々
• CUD File Format Type
– JSON形式のCUD定義(Create/Update/Delete)のKafka MessageをCypherに変換して実行
– Cypherとデータが一体
13
Neo4j
Stream
Sink Connection
受け渡し・差分更新
Kafka Broker
Producerの実装は、
Neo4j Streams Producer(Neo4j Only) or
[RDB/NoSQL] Kafka CDC or
Kafka Connector JDBC
Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved
Cypher Template Typeの設定
• neo4j.conf
kafka.zookeeper.connect=localhost:2181
kafka.bootstrap.servers=localhost:9092
streams.sink.enabled=true
streams.sink.topic.cypher.my-topic=MERGE (n:Label {id: event.id}) ¥
ON CREATE SET n += event.properties
• Kafka Message
{
"id": 42,
"properties": {
"title": "Answer to anyting",
"description": "It depends."
}
}
14
データをCypher Queryに食べさせて実行
Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved
CUD(Create/Update/Delete) File Formatの設定
• neo4j.conf
streams.sink.topic.cud=my-topic;my-other.topic
• CUD File FormatのKafka MessageをCypher Queryに変換して実行
15
Kafka Event
{
"op": "merge",
"properties": {
"foo": "value",
"key": 1
},
"ids": {"key": 1, "otherKey": "foo"},
"labels": ["Foo","Bar"],
"type": "node",
"detach": true
}
Cypher Query
UNWIND [..., {
"op": "merge",
"properties": {
"foo": "value",
"key": 1
},
"ids": {"key": 1, "otherKey": "foo"},
"labels": ["Foo","Bar"],
"type": "node",
"detach": true
}, ...] AS event
MERGE (n:Foo:Bar {key: event.ids.key, otherkey:
event.ids.otherkey})
ON CREATE SET n += event.properties
変換
Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved
[RDB/NoSQL]Kafka CDC Connector #Confluentがサポート
• Kafka CDC Connector(Confluent supported)
– RDB/NoSQLの更新を捕獲し、Kafka Brokerに投入
16
RDB/NoSQL
Producer
Kafka CDC
Connector
Source Connection
差分捕獲・受け渡し
• MySQL
• PostgreSQL
• MongoDB
• Etc
Consumerの実装は
Neo4j Streams Consumer or
Kafka Connetor Neo4j or
Kafka Connector JDBC
Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved 17
https://www.confluent.io/hub/
Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved
[RDB/NoSQL]Kafka CDC ConnectorとNeo4j Streamを疎結合
• Source Side
– Kafka CDC Connector(Confluent supported)
• Sink Side
– Neo4j Stream or Kafka Connector Neo4j
18
RDB/NoSQL
Kafka CDC
Connector
CONFLUEN HUB
• MySQL
• PostgreSQL
• MongoDB
• Etc
Neo4j
Streams
Consumer
Kafka
Connector
Neo4j
or
Source Connection
差分捕獲・受け渡し
Sink Connection
受け渡し・差分更新
Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved
まとめ
• ガチのETLツールってOSS由来でも有償であり、かなり高いから有力な代替案になりそうだ
• Neo4j Stream、説明がとてもややこしい(今回のセッション聞いた人は大丈夫)
• Confluentの[RDB/NoSQL]Kafka CDC Connector、実装方法とかの説明が乏しい (要件を見極めて実現可能性の検
証から入っていたほうがよさそう)
• 異常系の処理で冪等性が保証されるか (使うなら徹底検証要)
• 順序性のキープが必要になると、Kafkaで1パーティションしが使えず、スループットが犠牲になる可能性あり(要件を見極めて
Topic設計の工夫が必要そう)
19
https://neo4j.com/docs/labs/neo4j-streams/current/

More Related Content

What's hot

20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)
20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)
20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)
Amazon Web Services Japan
 
20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...
20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...
20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...
Amazon Web Services Japan
 
20200630 AWS Black Belt Online Seminar Amazon Cognito
20200630 AWS Black Belt Online Seminar Amazon Cognito20200630 AWS Black Belt Online Seminar Amazon Cognito
20200630 AWS Black Belt Online Seminar Amazon Cognito
Amazon Web Services Japan
 
20190226 AWS Black Belt Online Seminar Amazon WorkSpaces
20190226 AWS Black Belt Online Seminar Amazon WorkSpaces20190226 AWS Black Belt Online Seminar Amazon WorkSpaces
20190226 AWS Black Belt Online Seminar Amazon WorkSpaces
Amazon Web Services Japan
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
Trainocate Japan, Ltd.
 
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
Amazon Web Services Japan
 
AWS の IoT 向けサービス
AWS の IoT 向けサービスAWS の IoT 向けサービス
AWS の IoT 向けサービス
Amazon Web Services Japan
 
決済サービスのSpring Bootのバージョンを2系に上げた話
決済サービスのSpring Bootのバージョンを2系に上げた話決済サービスのSpring Bootのバージョンを2系に上げた話
決済サービスのSpring Bootのバージョンを2系に上げた話
Ryosuke Uchitate
 
20180703 AWS Black Belt Online Seminar Amazon Neptune
20180703 AWS Black Belt Online Seminar Amazon Neptune20180703 AWS Black Belt Online Seminar Amazon Neptune
20180703 AWS Black Belt Online Seminar Amazon Neptune
Amazon Web Services Japan
 
20190522 AWS Black Belt Online Seminar AWS Step Functions
20190522 AWS Black Belt Online Seminar AWS Step Functions20190522 AWS Black Belt Online Seminar AWS Step Functions
20190522 AWS Black Belt Online Seminar AWS Step Functions
Amazon Web Services Japan
 
Glue DataBrewでデータをクリーニング、加工してみよう
Glue DataBrewでデータをクリーニング、加工してみようGlue DataBrewでデータをクリーニング、加工してみよう
Glue DataBrewでデータをクリーニング、加工してみよう
takeshi suto
 
20200219 AWS Black Belt Online Seminar オンプレミスとAWS間の冗長化接続
20200219 AWS Black Belt Online Seminar オンプレミスとAWS間の冗長化接続20200219 AWS Black Belt Online Seminar オンプレミスとAWS間の冗長化接続
20200219 AWS Black Belt Online Seminar オンプレミスとAWS間の冗長化接続
Amazon Web Services Japan
 
CloudFormation Getting Started with YAML
CloudFormation Getting Started with YAMLCloudFormation Getting Started with YAML
CloudFormation Getting Started with YAML
Yukitaka Ohmura
 
Spring tools4
Spring tools4Spring tools4
Spring tools4
Takuya Iwatsuka
 
20190521 AWS Black Belt Online Seminar Amazon Simple Email Service (Amazon SES)
20190521 AWS Black Belt Online Seminar Amazon Simple Email Service (Amazon SES)20190521 AWS Black Belt Online Seminar Amazon Simple Email Service (Amazon SES)
20190521 AWS Black Belt Online Seminar Amazon Simple Email Service (Amazon SES)
Amazon Web Services Japan
 
20200818 AWS Black Belt Online Seminar AWS Shield Advanced
20200818 AWS Black Belt Online Seminar AWS Shield Advanced20200818 AWS Black Belt Online Seminar AWS Shield Advanced
20200818 AWS Black Belt Online Seminar AWS Shield Advanced
Amazon Web Services Japan
 
AWS Black Belt Tech シリーズ 2016 - Amazon CloudFront
AWS Black Belt Tech シリーズ 2016 - Amazon CloudFront AWS Black Belt Tech シリーズ 2016 - Amazon CloudFront
AWS Black Belt Tech シリーズ 2016 - Amazon CloudFront
Amazon Web Services Japan
 
AWS Black Belt Online Seminar AWS Direct Connect
AWS Black Belt Online Seminar AWS Direct ConnectAWS Black Belt Online Seminar AWS Direct Connect
AWS Black Belt Online Seminar AWS Direct Connect
Amazon Web Services Japan
 
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとりVue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Yuta Ohashi
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
yoku0825
 

What's hot (20)

20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)
20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)
20191029 AWS Black Belt Online Seminar Elastic Load Balancing (ELB)
 
20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...
20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...
20200422 AWS Black Belt Online Seminar Amazon Elastic Container Service (Amaz...
 
20200630 AWS Black Belt Online Seminar Amazon Cognito
20200630 AWS Black Belt Online Seminar Amazon Cognito20200630 AWS Black Belt Online Seminar Amazon Cognito
20200630 AWS Black Belt Online Seminar Amazon Cognito
 
20190226 AWS Black Belt Online Seminar Amazon WorkSpaces
20190226 AWS Black Belt Online Seminar Amazon WorkSpaces20190226 AWS Black Belt Online Seminar Amazon WorkSpaces
20190226 AWS Black Belt Online Seminar Amazon WorkSpaces
 
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
AWSとオンプレミスを繋ぐときに知っておきたいルーティングの基礎知識(CCSI監修!)
 
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
20190424 AWS Black Belt Online Seminar Amazon Aurora MySQL
 
AWS の IoT 向けサービス
AWS の IoT 向けサービスAWS の IoT 向けサービス
AWS の IoT 向けサービス
 
決済サービスのSpring Bootのバージョンを2系に上げた話
決済サービスのSpring Bootのバージョンを2系に上げた話決済サービスのSpring Bootのバージョンを2系に上げた話
決済サービスのSpring Bootのバージョンを2系に上げた話
 
20180703 AWS Black Belt Online Seminar Amazon Neptune
20180703 AWS Black Belt Online Seminar Amazon Neptune20180703 AWS Black Belt Online Seminar Amazon Neptune
20180703 AWS Black Belt Online Seminar Amazon Neptune
 
20190522 AWS Black Belt Online Seminar AWS Step Functions
20190522 AWS Black Belt Online Seminar AWS Step Functions20190522 AWS Black Belt Online Seminar AWS Step Functions
20190522 AWS Black Belt Online Seminar AWS Step Functions
 
Glue DataBrewでデータをクリーニング、加工してみよう
Glue DataBrewでデータをクリーニング、加工してみようGlue DataBrewでデータをクリーニング、加工してみよう
Glue DataBrewでデータをクリーニング、加工してみよう
 
20200219 AWS Black Belt Online Seminar オンプレミスとAWS間の冗長化接続
20200219 AWS Black Belt Online Seminar オンプレミスとAWS間の冗長化接続20200219 AWS Black Belt Online Seminar オンプレミスとAWS間の冗長化接続
20200219 AWS Black Belt Online Seminar オンプレミスとAWS間の冗長化接続
 
CloudFormation Getting Started with YAML
CloudFormation Getting Started with YAMLCloudFormation Getting Started with YAML
CloudFormation Getting Started with YAML
 
Spring tools4
Spring tools4Spring tools4
Spring tools4
 
20190521 AWS Black Belt Online Seminar Amazon Simple Email Service (Amazon SES)
20190521 AWS Black Belt Online Seminar Amazon Simple Email Service (Amazon SES)20190521 AWS Black Belt Online Seminar Amazon Simple Email Service (Amazon SES)
20190521 AWS Black Belt Online Seminar Amazon Simple Email Service (Amazon SES)
 
20200818 AWS Black Belt Online Seminar AWS Shield Advanced
20200818 AWS Black Belt Online Seminar AWS Shield Advanced20200818 AWS Black Belt Online Seminar AWS Shield Advanced
20200818 AWS Black Belt Online Seminar AWS Shield Advanced
 
AWS Black Belt Tech シリーズ 2016 - Amazon CloudFront
AWS Black Belt Tech シリーズ 2016 - Amazon CloudFront AWS Black Belt Tech シリーズ 2016 - Amazon CloudFront
AWS Black Belt Tech シリーズ 2016 - Amazon CloudFront
 
AWS Black Belt Online Seminar AWS Direct Connect
AWS Black Belt Online Seminar AWS Direct ConnectAWS Black Belt Online Seminar AWS Direct Connect
AWS Black Belt Online Seminar AWS Direct Connect
 
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとりVue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
 

Similar to Neo4j Stream, [RDB/NoSQL]Kafka Connector CDC(Change Data Captuer)の紹介

AWS Blackbelt 2015シリーズ AWS Lambda
AWS Blackbelt 2015シリーズ AWS LambdaAWS Blackbelt 2015シリーズ AWS Lambda
AWS Blackbelt 2015シリーズ AWS Lambda
Amazon Web Services Japan
 
サイバーエージェントにおけるデータの品質管理について #cwt2016
サイバーエージェントにおけるデータの品質管理について #cwt2016サイバーエージェントにおけるデータの品質管理について #cwt2016
サイバーエージェントにおけるデータの品質管理について #cwt2016
cyberagent
 
[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓
[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓
[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓
Insight Technology, Inc.
 
トレジャーデータ株式会社について(for all Data_Enthusiast!!)
トレジャーデータ株式会社について(for all Data_Enthusiast!!)トレジャーデータ株式会社について(for all Data_Enthusiast!!)
トレジャーデータ株式会社について(for all Data_Enthusiast!!)Takahiro Inoue
 
Realm platform2019
Realm platform2019Realm platform2019
Realm platform2019
昌桓 李
 
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
Recruit Technologies
 
Treasure Data Intro for Data Enthusiast!!
Treasure Data Intro for Data Enthusiast!!Treasure Data Intro for Data Enthusiast!!
Treasure Data Intro for Data Enthusiast!!Takahiro Inoue
 
MongoDB Atlasアカウント取得
MongoDB Atlasアカウント取得MongoDB Atlasアカウント取得
MongoDB Atlasアカウント取得
昌桓 李
 
db tech showcase2016 - MySQLドキュメントストア
db tech showcase2016 - MySQLドキュメントストアdb tech showcase2016 - MySQLドキュメントストア
db tech showcase2016 - MySQLドキュメントストア
Shinya Sugiyama
 
JAWSDAYS2016 Technical Deep DIVE
JAWSDAYS2016 Technical Deep DIVE JAWSDAYS2016 Technical Deep DIVE
JAWSDAYS2016 Technical Deep DIVE
陽平 山口
 
トレジャーデータ新サービス発表 2013/12/9
トレジャーデータ新サービス発表 2013/12/9トレジャーデータ新サービス発表 2013/12/9
トレジャーデータ新サービス発表 2013/12/9
Treasure Data, Inc.
 
Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...
Shotaro Suzuki
 
ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説Akira Inoue
 
ぐるなびが活用するElastic Cloud
ぐるなびが活用するElastic Cloudぐるなびが活用するElastic Cloud
ぐるなびが活用するElastic Cloud
Elasticsearch
 
MySQL Technology Cafe #12 MDS HA検証 ~パラメータからパフォーマンスまで~
MySQL Technology Cafe #12 MDS HA検証 ~パラメータからパフォーマンスまで~MySQL Technology Cafe #12 MDS HA検証 ~パラメータからパフォーマンスまで~
MySQL Technology Cafe #12 MDS HA検証 ~パラメータからパフォーマンスまで~
オラクルエンジニア通信
 
Cloud Identity Summit 2011 TOI
Cloud Identity Summit 2011 TOICloud Identity Summit 2011 TOI
Cloud Identity Summit 2011 TOI
Tatsuo Kudo
 
2016/4/16 Softlayer Bluemix Community Festa 2016講演資料
2016/4/16 Softlayer Bluemix Community Festa 2016講演資料2016/4/16 Softlayer Bluemix Community Festa 2016講演資料
2016/4/16 Softlayer Bluemix Community Festa 2016講演資料
Mitsutoshi Kiuchi
 
データホテル・フルマネージドホスティング サービスを支えるOSSと、活用事例
データホテル・フルマネージドホスティング サービスを支えるOSSと、活用事例データホテル・フルマネージドホスティング サービスを支えるOSSと、活用事例
データホテル・フルマネージドホスティング サービスを支えるOSSと、活用事例
NHN テコラス株式会社
 
Developers Summit 2015 【19-B-L】 DevOpsの究極の形!?、クラウドで始めるドキュメント・データベース活用のポイント。
Developers Summit 2015 【19-B-L】 DevOpsの究極の形!?、クラウドで始めるドキュメント・データベース活用のポイント。Developers Summit 2015 【19-B-L】 DevOpsの究極の形!?、クラウドで始めるドキュメント・データベース活用のポイント。
Developers Summit 2015 【19-B-L】 DevOpsの究極の形!?、クラウドで始めるドキュメント・データベース活用のポイント。
aiichiro
 
巨大なサービスと膨大なデータを支えるプラットフォーム

巨大なサービスと膨大なデータを支えるプラットフォーム
巨大なサービスと膨大なデータを支えるプラットフォーム

巨大なサービスと膨大なデータを支えるプラットフォーム

Tetsutaro Watanabe
 

Similar to Neo4j Stream, [RDB/NoSQL]Kafka Connector CDC(Change Data Captuer)の紹介 (20)

AWS Blackbelt 2015シリーズ AWS Lambda
AWS Blackbelt 2015シリーズ AWS LambdaAWS Blackbelt 2015シリーズ AWS Lambda
AWS Blackbelt 2015シリーズ AWS Lambda
 
サイバーエージェントにおけるデータの品質管理について #cwt2016
サイバーエージェントにおけるデータの品質管理について #cwt2016サイバーエージェントにおけるデータの品質管理について #cwt2016
サイバーエージェントにおけるデータの品質管理について #cwt2016
 
[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓
[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓
[db tech showcase Tokyo 2015] E27: Neo4jグラフデータベース by クリエーションライン株式会社 李昌桓
 
トレジャーデータ株式会社について(for all Data_Enthusiast!!)
トレジャーデータ株式会社について(for all Data_Enthusiast!!)トレジャーデータ株式会社について(for all Data_Enthusiast!!)
トレジャーデータ株式会社について(for all Data_Enthusiast!!)
 
Realm platform2019
Realm platform2019Realm platform2019
Realm platform2019
 
ビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分けビッグデータ処理データベースの全体像と使い分け
ビッグデータ処理データベースの全体像と使い分け
 
Treasure Data Intro for Data Enthusiast!!
Treasure Data Intro for Data Enthusiast!!Treasure Data Intro for Data Enthusiast!!
Treasure Data Intro for Data Enthusiast!!
 
MongoDB Atlasアカウント取得
MongoDB Atlasアカウント取得MongoDB Atlasアカウント取得
MongoDB Atlasアカウント取得
 
db tech showcase2016 - MySQLドキュメントストア
db tech showcase2016 - MySQLドキュメントストアdb tech showcase2016 - MySQLドキュメントストア
db tech showcase2016 - MySQLドキュメントストア
 
JAWSDAYS2016 Technical Deep DIVE
JAWSDAYS2016 Technical Deep DIVE JAWSDAYS2016 Technical Deep DIVE
JAWSDAYS2016 Technical Deep DIVE
 
トレジャーデータ新サービス発表 2013/12/9
トレジャーデータ新サービス発表 2013/12/9トレジャーデータ新サービス発表 2013/12/9
トレジャーデータ新サービス発表 2013/12/9
 
Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...Building React, Flutter and Blazor development and debugging environment with...
Building React, Flutter and Blazor development and debugging environment with...
 
ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説ASP.NET シングル ページ アプリケーション (SPA) 詳説
ASP.NET シングル ページ アプリケーション (SPA) 詳説
 
ぐるなびが活用するElastic Cloud
ぐるなびが活用するElastic Cloudぐるなびが活用するElastic Cloud
ぐるなびが活用するElastic Cloud
 
MySQL Technology Cafe #12 MDS HA検証 ~パラメータからパフォーマンスまで~
MySQL Technology Cafe #12 MDS HA検証 ~パラメータからパフォーマンスまで~MySQL Technology Cafe #12 MDS HA検証 ~パラメータからパフォーマンスまで~
MySQL Technology Cafe #12 MDS HA検証 ~パラメータからパフォーマンスまで~
 
Cloud Identity Summit 2011 TOI
Cloud Identity Summit 2011 TOICloud Identity Summit 2011 TOI
Cloud Identity Summit 2011 TOI
 
2016/4/16 Softlayer Bluemix Community Festa 2016講演資料
2016/4/16 Softlayer Bluemix Community Festa 2016講演資料2016/4/16 Softlayer Bluemix Community Festa 2016講演資料
2016/4/16 Softlayer Bluemix Community Festa 2016講演資料
 
データホテル・フルマネージドホスティング サービスを支えるOSSと、活用事例
データホテル・フルマネージドホスティング サービスを支えるOSSと、活用事例データホテル・フルマネージドホスティング サービスを支えるOSSと、活用事例
データホテル・フルマネージドホスティング サービスを支えるOSSと、活用事例
 
Developers Summit 2015 【19-B-L】 DevOpsの究極の形!?、クラウドで始めるドキュメント・データベース活用のポイント。
Developers Summit 2015 【19-B-L】 DevOpsの究極の形!?、クラウドで始めるドキュメント・データベース活用のポイント。Developers Summit 2015 【19-B-L】 DevOpsの究極の形!?、クラウドで始めるドキュメント・データベース活用のポイント。
Developers Summit 2015 【19-B-L】 DevOpsの究極の形!?、クラウドで始めるドキュメント・データベース活用のポイント。
 
巨大なサービスと膨大なデータを支えるプラットフォーム

巨大なサービスと膨大なデータを支えるプラットフォーム
巨大なサービスと膨大なデータを支えるプラットフォーム

巨大なサービスと膨大なデータを支えるプラットフォーム

 

More from 昌桓 李

MongoDB Atlasの構成について 2019
MongoDB Atlasの構成について 2019MongoDB Atlasの構成について 2019
MongoDB Atlasの構成について 2019
昌桓 李
 
Jenkins study jenkins build-cicdi
Jenkins study jenkins build-cicdiJenkins study jenkins build-cicdi
Jenkins study jenkins build-cicdi
昌桓 李
 
グラフデータの視覚化ツールーTom Sawyer Perspectives
グラフデータの視覚化ツールーTom Sawyer Perspectivesグラフデータの視覚化ツールーTom Sawyer Perspectives
グラフデータの視覚化ツールーTom Sawyer Perspectives
昌桓 李
 
スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)
スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)
スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)
昌桓 李
 
MongoDB社の製品紹介 2019-MongoDB EA&Atlas
MongoDB社の製品紹介 2019-MongoDB EA&AtlasMongoDB社の製品紹介 2019-MongoDB EA&Atlas
MongoDB社の製品紹介 2019-MongoDB EA&Atlas
昌桓 李
 
異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j
昌桓 李
 
Neo4j高可用性クラスタ― vs 大規模分散クラスタ―の解説
Neo4j高可用性クラスタ― vs 大規模分散クラスタ―の解説Neo4j高可用性クラスタ― vs 大規模分散クラスタ―の解説
Neo4j高可用性クラスタ― vs 大規模分散クラスタ―の解説
昌桓 李
 

More from 昌桓 李 (7)

MongoDB Atlasの構成について 2019
MongoDB Atlasの構成について 2019MongoDB Atlasの構成について 2019
MongoDB Atlasの構成について 2019
 
Jenkins study jenkins build-cicdi
Jenkins study jenkins build-cicdiJenkins study jenkins build-cicdi
Jenkins study jenkins build-cicdi
 
グラフデータの視覚化ツールーTom Sawyer Perspectives
グラフデータの視覚化ツールーTom Sawyer Perspectivesグラフデータの視覚化ツールーTom Sawyer Perspectives
グラフデータの視覚化ツールーTom Sawyer Perspectives
 
スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)
スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)
スケールアップファーストのNoSQL、ScyllaDB(スキュラDB)
 
MongoDB社の製品紹介 2019-MongoDB EA&Atlas
MongoDB社の製品紹介 2019-MongoDB EA&AtlasMongoDB社の製品紹介 2019-MongoDB EA&Atlas
MongoDB社の製品紹介 2019-MongoDB EA&Atlas
 
異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j異次元のグラフデータベースNeo4j
異次元のグラフデータベースNeo4j
 
Neo4j高可用性クラスタ― vs 大規模分散クラスタ―の解説
Neo4j高可用性クラスタ― vs 大規模分散クラスタ―の解説Neo4j高可用性クラスタ― vs 大規模分散クラスタ―の解説
Neo4j高可用性クラスタ― vs 大規模分散クラスタ―の解説
 

Recently uploaded

クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdfクラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
TatsuyaHanayama
 
RayBarcode Product Description Documentation - 2024.6.19
RayBarcode Product Description Documentation - 2024.6.19RayBarcode Product Description Documentation - 2024.6.19
RayBarcode Product Description Documentation - 2024.6.19
GrapeCity, inc.
 
RaySheet Product Description Documentation - 2024.6.19
RaySheet Product Description Documentation - 2024.6.19RaySheet Product Description Documentation - 2024.6.19
RaySheet Product Description Documentation - 2024.6.19
GrapeCity, inc.
 
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet DocumentationRaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
GrapeCity, inc.
 
Bhyve Management Daemon Version 3.0 on FreBSD
Bhyve Management Daemon Version 3.0 on FreBSDBhyve Management Daemon Version 3.0 on FreBSD
Bhyve Management Daemon Version 3.0 on FreBSD
Yuichiro Naito
 
RayPen Product Description Documentation - 2024.6.19
RayPen Product Description Documentation - 2024.6.19RayPen Product Description Documentation - 2024.6.19
RayPen Product Description Documentation - 2024.6.19
GrapeCity, inc.
 
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Eventシグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
K Kinzal
 
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer EventSolanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
K Kinzal
 

Recently uploaded (8)

クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdfクラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
クラウドネイティブにおけるセキュアなソフトウェア・サプライ・チェーンの考え方とベストプラクティス.pdf
 
RayBarcode Product Description Documentation - 2024.6.19
RayBarcode Product Description Documentation - 2024.6.19RayBarcode Product Description Documentation - 2024.6.19
RayBarcode Product Description Documentation - 2024.6.19
 
RaySheet Product Description Documentation - 2024.6.19
RaySheet Product Description Documentation - 2024.6.19RaySheet Product Description Documentation - 2024.6.19
RaySheet Product Description Documentation - 2024.6.19
 
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet DocumentationRaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
RaySheetで解決できるシナリオ10選-業務改善に貢献する機能 - RaySheet Documentation
 
Bhyve Management Daemon Version 3.0 on FreBSD
Bhyve Management Daemon Version 3.0 on FreBSDBhyve Management Daemon Version 3.0 on FreBSD
Bhyve Management Daemon Version 3.0 on FreBSD
 
RayPen Product Description Documentation - 2024.6.19
RayPen Product Description Documentation - 2024.6.19RayPen Product Description Documentation - 2024.6.19
RayPen Product Description Documentation - 2024.6.19
 
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Eventシグネチャで始めるRustプログラミング - Superteam Japan Developer Event
シグネチャで始めるRustプログラミング - Superteam Japan Developer Event
 
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer EventSolanaで始めるRustプログラミング - Superteam Japan Developer Event
Solanaで始めるRustプログラミング - Superteam Japan Developer Event
 

Neo4j Stream, [RDB/NoSQL]Kafka Connector CDC(Change Data Captuer)の紹介

  • 1. Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved Neo4j Stream, [RDB/NoSQL]Kafka Connector CDC(Change Data Captuer)の紹介 2019/12/06 CREATIONLINE,INC. 李 昌桓(LEE CHANGHWAN) 1
  • 2. Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved 設立 • 2006年1月 BP含めて130人ぐらい 事業概要 • クラウドインテグレーション事業 • ioTビックデータ分析事業 • DevOps関連サービス事業 • サブスクリプション販売&サポート クリエーションラインのホームページ • https://www.creationline.com クリエーションライン株式会社 2
  • 3. Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved 自己紹介 李 昌桓 (LEE CHANGHWAN,@awk256) データベースが大好きなサーバサイドのエンジニア。NoSQLを中核とした「ビックデータ処理基盤のアーキテクト」として活 動している。 クリエーションライン www.creationline.com Neo4jユーザーグループ jp-neo4j-usersgroup.connpass.com [ブログ] www.creationline.com/lab/neo4j www.qiita.com/aw256 [著書] 「グラフデータベースNeo4j」の他 www.amazon.co.jp/李昌桓/e/B004LWEKOU 3
  • 4. Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved はじめに • 一般的にオペレーションデータはRDB又はNoSQLに格納 • RDB/NoSQLからGraph DBへネットワーク状のデータを展開 – 差分データの反映方法は? – 適切なコストで実装できるか? 4 RDB/NoSQL データの同期方法は? $$ https://neo4j.com/product/
  • 5. Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved 従来のETLの限界 5 RDB/NoSQL neo4j-etl neo4j-import load csv bolt-driver NEO4Jが提供しているETL(Extract抽出 Transform変換 Loadロード)では、差分処理が困難 • neo4j-etl/neo4j-import – 初期データのマイグレーション – 1回限り • load-csv/bolt-driver – 繰り返し上書きできるが – ソースデータからの差分抽出はNG 抽出 ロード 一回限り、差分処理困難
  • 6. Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved Neo4j Stream(October 1, 2019) 6 • Neo4j Streams Cypher Prcedure(Kafka ⇔ Neo4j) #Neo4jがサポート – Neo4j ProcedureでProducer/Consumer(Pub/Sub)を実装 • Neo4j Streams Consumer(Kafka to Neo4j) #Neo4jがサポート – Kafka Brokerに入って来たメッセージ(JSON)をNeo4jに反映 • Neo4j Streams Producer(Neo4j to Kafka) #Neo4jがサポート – Neo4jのCUD(Create/Update/Delete) をキャッチャーしてKafka Borkerに投げ込む(Change Data Capture:CDC) • Kafka Connect worker(Kafka to Neo4j) #Confluentがサポート – Kafka Connector Neo4j(Consumer) https://neo4j.com/press-releases/neo4j-streams-kafta-confluent/ RDB/NoSQL こちらの差分処理に は触れておらず、、
  • 7. Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved Stream Processとは 7 Application Publish • Twitterのように連続的、又は非連続的に流れるデータを受け渡しするPF Application Subscribe ソースからテキストタイプの 文字列(メッセージ)を受け取り、 連続してBrokerのTopicに取り込む (JSON/CSV/KeyValue) Broker Topic BrokerのTopicからFIFO でメッセージを取り出し、 望みの処理を実行する Source Target Topicは論理的なデータ の格納空間でDBで言えば、 Table各のもの ✓ AWS Kinesis ✓ GCP Pub/Sub ✓ Azure Data BUS ✓ Apache Kafka
  • 8. Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved Neo4j Streamのインストール 導入が簡単! • Neo4j Plugin – $NEO4J_HOME/plugins/neo4j-streams-3.5.4.jar – https://github.com/neo4j-contrib/neo4j-streams/releases/tag/3.5.4 • Neo4j.conf – kafka.zookeeper.connect=localhost:2181 – kafka.bootstrap.servers=localhost:9092 Kafka Serverは、別途インストール要! 8 https://neo4j.com/docs/labs/neo4j-streams/current/introduction/
  • 9. Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved Neo4j Streams Cypher Procedure #Neo4jがサポート • neo4j.conf – streams.procedures.enabled=<true/false, default=true> • Cypher Procedureとしてコーディング – CALL streams.publish('my-topic', 'Hello World from Neo4j!’) – {"payload":"Hello world from Neo4j!"} #Kafkaからこのように読み取れる – CALL streams.consume('my-topic', {<config>}) YIELD event RETURN event 9 stream- publish stream- consume Source Connection 差分捕獲・受け渡し Sink Connection 受け渡し・差分更新 Kafka Broker https://neo4j.com/docs/labs/neo4j-streams/current/procedures/
  • 10. Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved Neo4j Streams Producer(Publish, CDC) #Neo4jがサポート • Neo4jの変更データを捕獲し、Kafkaに投げる(Change Data Capture:CDC) – Node Pattern→ Label{*};Label1{prop1, prop2};Label3{-prop1,-prop2} – Relationship Pattern → KNOWS{*};MEET{prop1, prop2};ANSWER{-prop1,-prop2} 10 Producer Source Connection 差分捕獲・受け渡し Consumerの実装は Neo4j Streams Consumer or Kafka Connetor Neo4j or Kafka Connector JDBC https://neo4j.com/docs/labs/neo4j-streams/current/producer/
  • 11. Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved Change Data Captuer Setting • neo4j.conf kafka.zookeeper.connect=localhost:2181 kafka.bootstrap.servers=localhost:9092 kafka.acks=1 kafka.num.partitions=1 kafka.retries=2 kafka.batch.size=16384 kafka.buffer.memory=33554432 kafka.reindex.batch.size=1000 kafka.session.timeout.ms=15000 kafka.connection.timeout.ms=10000 kafka.replication=1 kafka.linger.ms=1 kafka.transactional.id= streams.source.topic.nodes.my-topic=Label{*};Label1{prop1, prop2};Label3{-prop1,-prop2} streams.source.topic.relationships.my-topic=KNOWS{*};MEET{prop1, prop2};ANSWER{-prop1,-prop2} streams.source.enabled=<true/false, default=true> streams.source.schema.polling.interval=<MILLIS, the polling interval for getting the schema information> 11 この設定に当てはまる パターンをフィルター
  • 12. Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved Change Data Captuer Setting 続き { "meta": { "timestamp": 1532597182604, "username": "neo4j", "tx_id": 3, "tx_event_id": 0, "tx_events_count": 2, "operation": "created", "source": { "hostname": "neo4j.mycompany.com" } }, "payload": { "id": "1004", "type": "node", "after": { "labels": ["Person"], "properties": { "email": "annek@noanswer.org", "last_name": "Kretchmar", "first_name": "Anne Marie" } } }, "schema": { "properties": { "last_name": "String", "email": "String", "first_name": "String" }, "constraints": [{ "label": "Person", "properties": ["first_name", "last_name"], "type": "UNIQUE" }] } } 12 "payload": { "id": "1004", "type": "node", "before": { "labels": ["Person", "Tmp"], "properties": { "email": "annek@noanswer.org", "last_name": "Kretchmar", "first_name": "Anne" } } } 捕獲されたデータの例 PayloadデータをKafka Borkerに投げる
  • 13. Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved Neo4j Streams Consumer(Subscribe) #Neo4jがサポート • Cypher Template Type – neo4j.confに設定されているCypherのTemplateに、JSON形式のKafka Messageを食べさせて実行 – Cypherとデータは別々 • CUD File Format Type – JSON形式のCUD定義(Create/Update/Delete)のKafka MessageをCypherに変換して実行 – Cypherとデータが一体 13 Neo4j Stream Sink Connection 受け渡し・差分更新 Kafka Broker Producerの実装は、 Neo4j Streams Producer(Neo4j Only) or [RDB/NoSQL] Kafka CDC or Kafka Connector JDBC
  • 14. Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved Cypher Template Typeの設定 • neo4j.conf kafka.zookeeper.connect=localhost:2181 kafka.bootstrap.servers=localhost:9092 streams.sink.enabled=true streams.sink.topic.cypher.my-topic=MERGE (n:Label {id: event.id}) ¥ ON CREATE SET n += event.properties • Kafka Message { "id": 42, "properties": { "title": "Answer to anyting", "description": "It depends." } } 14 データをCypher Queryに食べさせて実行
  • 15. Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved CUD(Create/Update/Delete) File Formatの設定 • neo4j.conf streams.sink.topic.cud=my-topic;my-other.topic • CUD File FormatのKafka MessageをCypher Queryに変換して実行 15 Kafka Event { "op": "merge", "properties": { "foo": "value", "key": 1 }, "ids": {"key": 1, "otherKey": "foo"}, "labels": ["Foo","Bar"], "type": "node", "detach": true } Cypher Query UNWIND [..., { "op": "merge", "properties": { "foo": "value", "key": 1 }, "ids": {"key": 1, "otherKey": "foo"}, "labels": ["Foo","Bar"], "type": "node", "detach": true }, ...] AS event MERGE (n:Foo:Bar {key: event.ids.key, otherkey: event.ids.otherkey}) ON CREATE SET n += event.properties 変換
  • 16. Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved [RDB/NoSQL]Kafka CDC Connector #Confluentがサポート • Kafka CDC Connector(Confluent supported) – RDB/NoSQLの更新を捕獲し、Kafka Brokerに投入 16 RDB/NoSQL Producer Kafka CDC Connector Source Connection 差分捕獲・受け渡し • MySQL • PostgreSQL • MongoDB • Etc Consumerの実装は Neo4j Streams Consumer or Kafka Connetor Neo4j or Kafka Connector JDBC
  • 17. Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved 17 https://www.confluent.io/hub/
  • 18. Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved [RDB/NoSQL]Kafka CDC ConnectorとNeo4j Streamを疎結合 • Source Side – Kafka CDC Connector(Confluent supported) • Sink Side – Neo4j Stream or Kafka Connector Neo4j 18 RDB/NoSQL Kafka CDC Connector CONFLUEN HUB • MySQL • PostgreSQL • MongoDB • Etc Neo4j Streams Consumer Kafka Connector Neo4j or Source Connection 差分捕獲・受け渡し Sink Connection 受け渡し・差分更新
  • 19. Copyright ⓒ2019 CREATIONLINE, INC. All Rights Reserved まとめ • ガチのETLツールってOSS由来でも有償であり、かなり高いから有力な代替案になりそうだ • Neo4j Stream、説明がとてもややこしい(今回のセッション聞いた人は大丈夫) • Confluentの[RDB/NoSQL]Kafka CDC Connector、実装方法とかの説明が乏しい (要件を見極めて実現可能性の検 証から入っていたほうがよさそう) • 異常系の処理で冪等性が保証されるか (使うなら徹底検証要) • 順序性のキープが必要になると、Kafkaで1パーティションしが使えず、スループットが犠牲になる可能性あり(要件を見極めて Topic設計の工夫が必要そう) 19 https://neo4j.com/docs/labs/neo4j-streams/current/