From b9e3ec9f6954d6bc73994f4144313c20401bcf24 Mon Sep 17 00:00:00 2001 From: ismail simsek Date: Sun, 19 Sep 2021 16:44:12 +0200 Subject: [PATCH] Minor improvements (#20) Minor improvements --- BLOGPOST.md | 48 ------------------ README.md | 16 +++--- debezium-server-iceberg-sink/pom.xml | 1 - .../batchsizewait/DynamicBatchSizeWait.java | 1 + docs/images/Debezium-Iceberg.png | Bin 0 -> 52054 bytes pom.xml | 16 +++--- 6 files changed, 18 insertions(+), 64 deletions(-) delete mode 100644 BLOGPOST.md create mode 100644 docs/images/Debezium-Iceberg.png diff --git a/BLOGPOST.md b/BLOGPOST.md deleted file mode 100644 index 81c6d9ae..00000000 --- a/BLOGPOST.md +++ /dev/null @@ -1,48 +0,0 @@ -# Using Debezium to Create ACID Data Lake House - -Do you need to build flexible Data Lakehouse but don't know where to start, do you want your data pipeline to be near realtime and support ACID transactions and updates -its possible using two great projects Debezium and Apache Iceberg without any dependency to kafka or spark - -#### Debezium -Debezium is an open source distributed platform for change data capture. -Debezium extracts realtime database changes as json, avro, protobuf events and delivers to event streaming platforms -(Kafka, Kinesis, Google Pub/Sub, Pulsar are just some of [supported sinks](https://debezium.io/documentation/reference/operations/debezium-server.html#_sink_configuration)), -it provides simple interface to [implement new sink](https://debezium.io/documentation/reference/operations/debezium-server.html#_implementation_of_a_new_sink) - -#### Apache Iceberg -Apache Iceberg is an open table format for huge analytic datasets, with Concurrent ACID writes, it supports Insert and Row level Deletes(Update)[it has many other benefits](https://iceberg.apache.org) -Apache iceberg has great foundation and flexible API which currently supported by Spark, Presto, Trino, Flink and Hive - -## Debezium Server Iceberg - -[@TODO visual architecture diagram] - -Debezium Server Iceberg project puts both projects together and enables realtime data pipeline to any cloud storage, hdfs destination supported by iceberg -Debezium Server Iceberg it is possible to use best features from both projects like realtime structured data pipeline and ACID table format with update support - -Debezium Iceberg sink extends [Debezium server quarkus application](https://debezium.io/documentation/reference/operations/debezium-server.html#_installation), - -Iceberg consumer converts debezium json events to iceberg rows and commits them to destination iceberg table using iceberg API -It's possible to append database events to iceberg tables or do upsert using source table primary key -since iceberg supports many cloud storage its easily possible to configure destination which could be any of hadoop storage cloud storage location. -with debezium-server-iceberg its easily possible to replicate your RDBMS to cloud storage - -# update, append -Iceberg consumer by default works with upsert mode. When a row updated on source table destination row replaced with up-to-date record. -with upsert mode data at destination is always deduplicate and kept up to date - - -V 0.12 iceberg -retain deletes as soft delete! -# wait delay batch size - -wait by reading debezium metrics! another great feature of debezium -# destination, iceberg catalog - -@Contribution ..etc - -# Links -[Apache iceberg](https://iceberg.apache.org/) -[Apache iceberg Github](https://github.com/apache/iceberg) -[Debezium](https://debezium.io/) -[Debezium Github](https://github.com/debezium/debezium) \ No newline at end of file diff --git a/README.md b/README.md index f4144ed3..1d287335 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ This project adds iceberg consumer to [debezium server application](https://debezium.io/documentation/reference/operations/debezium-server.html). it could be used to replicate database changes to iceberg table(Cloud storage, hdfs) without requiring Spark, Kafka or Streaming platform. +![Debezium Iceberg](docs/images/Debezium-Iceberg.png) + ## `iceberg` Consumer Iceberg consumer appends or upserts debezium events to destination iceberg tables. When event and key schemas @@ -27,13 +29,13 @@ values received then the record with higher `__op` priority is added to destinat ### Append Setting `debezium.sink.iceberg.upsert=false` will set the operation mode to append, with append mode data deduplication is not done, all received records are appended to destination table -Note: For the tables without primary key operation mode is append even configuration is set to upsert mode +Note: For the tables without primary key operation mode falls back to append even configuration is set to upsert mode #### Keeping Deleted Records By default `debezium.sink.iceberg.upsert-keep-deletes=true` will keep deletes in the iceberg table, setting it to false will remove deleted records from the destination iceberg table. With this config its possible to keep last version of the deleted -record in the table(to do soft deletes). +record in the table(possible to do soft deletes). ### Optimizing batch size (or commit interval) @@ -50,7 +52,7 @@ this should be configured with `debezium.source.max.queue.size` and `debezium.so This is default configuration by default consumer will not use any batch size wait #### DynamicBatchSizeWait - +**Deprecated** This wait strategy dynamically adds wait to increase batch size. Wait duration is calculated based on number of processed events in last 3 batches. if last batch sizes are lower than `max.batch.size` Wait duration will increase and if last batch sizes are bigger than 90% of `max.batch.size` Wait duration will decrease @@ -66,9 +68,9 @@ debezium.sink.batch.batch-size-wait.max-wait-ms=5000 ``` #### MaxBatchSizeWait -MaxBatchSizeWait uses debezium metrics to optimize batch size, this strategy is more precise compared to DynamicBatchSizeWait -DynamicBatchSizeWait periodically reads streaming queue current size and waits until it reaches to `max.batch.size` -maximum wait and check intervals are controlled by `debezium.sink.batch.batch-size-wait.max-wait-ms`, `debezium.sink.batch.batch-size-wait.wait-interval-ms` properties +MaxBatchSizeWait uses debezium metrics to optimize batch size, this strategy is more precise compared to DynamicBatchSizeWait. +MaxBatchSizeWait periodically reads streaming queue current size and waits until it reaches to `max.batch.size`. +Maximum wait and check intervals are controlled by `debezium.sink.batch.batch-size-wait.max-wait-ms`, `debezium.sink.batch.batch-size-wait.wait-interval-ms` properties. example setup to receive ~2048 events per commit. maximum wait is set to 30 seconds, streaming queue current size checked every 5 seconds ```properties @@ -98,7 +100,7 @@ database table = `inventory.customers` will be replicated to `default.testc_cdc_ ## Debezium Event Flattening -Iceberg consumer requires event flattening, Currently nested events and complex data types(like Struct) are not supported +Iceberg consumer requires event flattening, Currently nested events and complex data types(like Struct) are not supported. ```properties debezium.transforms=unwrap diff --git a/debezium-server-iceberg-sink/pom.xml b/debezium-server-iceberg-sink/pom.xml index d84881c8..c5d595df 100644 --- a/debezium-server-iceberg-sink/pom.xml +++ b/debezium-server-iceberg-sink/pom.xml @@ -161,7 +161,6 @@ mysql mysql-connector-java - 8.0.22 test diff --git a/debezium-server-iceberg-sink/src/main/java/io/debezium/server/iceberg/batchsizewait/DynamicBatchSizeWait.java b/debezium-server-iceberg-sink/src/main/java/io/debezium/server/iceberg/batchsizewait/DynamicBatchSizeWait.java index ef6de4f9..c0733014 100644 --- a/debezium-server-iceberg-sink/src/main/java/io/debezium/server/iceberg/batchsizewait/DynamicBatchSizeWait.java +++ b/debezium-server-iceberg-sink/src/main/java/io/debezium/server/iceberg/batchsizewait/DynamicBatchSizeWait.java @@ -25,6 +25,7 @@ */ @Dependent @Named("DynamicBatchSizeWait") +@Deprecated public class DynamicBatchSizeWait implements InterfaceBatchSizeWait { protected static final Logger LOGGER = LoggerFactory.getLogger(DynamicBatchSizeWait.class); diff --git a/docs/images/Debezium-Iceberg.png b/docs/images/Debezium-Iceberg.png new file mode 100644 index 0000000000000000000000000000000000000000..67524483021a774a6acec5d68535b43f77cd5f40 GIT binary patch literal 52054 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

    j5J9kY(VFu=w@$O?lbrk2}$ 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 literal 0 HcmV?d00001 diff --git a/pom.xml b/pom.xml index 901b25b1..cb26509d 100644 --- a/pom.xml +++ b/pom.xml @@ -17,13 +17,6 @@ ${revision} pom - - - nexus-orgapacheiceberg - https://repository.apache.org/content/repositories/orgapacheiceberg-1018/ - - - 0.1.0-SNAPSHOT @@ -43,7 +36,8 @@ 2.16.88 1.11.1 - 1.7.0.Alpha1 + 1.7.0.CR1 + 8.0.26 2.0.3.Final @@ -77,6 +71,12 @@ import + + + mysql + mysql-connector-java + ${version.mysql.driver} + io.debezium