CLI tool
datazip-inc/olake avatar
datazip-inc/olake

OLake Go for Apache Iceberg Replication

OLake - Fastest Databases, Kafka & S3 Replication to Apache Iceberg with Table optimization (Called OLake Fusion). ⚡ Efficient, quick and scalable data ingestion for real-time analytics. Supported sources : Postgres, MongoDB, MySQL, Oracle, MSSql, DB2, Kafka, S3.

1,568 stars268 forksGoApache-2.0

At a glance

What is it?
OLake Go is a Go-based ingestion engine for copying databases, Kafka topics, and S3 data into Apache Iceberg or Parquet. It suits teams building open lakehouse pipelines, with source-specific limits that should be checked before adoption.
Who is it for?
OLake Go fits teams that need database, Kafka, or S3 ingestion into Apache Iceberg without adding Spark, Flink, Kafka, or Debezium to the ingestion layer. It is less suitable when Oracle or DB2 CDC is required, when a fully documented local install path is needed, or when a managed vendor with a fixed support contract is preferred.
Can I use it commercially?
Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 1 day ago.
What is it written in?
Mainly Go, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 24, 2026, and from our analysis. They are not legal advice.

Editorial analysis

OLake Go and the Iceberg Ingestion Boundary

OLake Go addresses the gap between operational data sources and analytical table formats. The README describes replication from transactional databases, Kafka, and S3 into Apache Iceberg or plain Parquet. Its intended users are engineers building lakehouse ingestion pipelines who want the destination stored in an open table format rather than tied to a single warehouse.

The supported source set includes PostgreSQL, MySQL, MongoDB, Oracle, DB2, MSSQL, Kafka, and S3. The README also says that OLake Go provides full load and change data capture, with incremental sync listed as a separate capability. That distinction matters. A full load copies existing records, CDC follows changes generated by the source, and incremental sync handles a narrower selection or schedule. The project presents these as pipeline features, but it does not document every scheduling and consistency detail in the README.

The destination is either Apache Iceberg or plain Parquet. Iceberg provides table metadata, schema evolution, and catalog integrations such as Glue, Hive, JDBC, and REST catalogs. Plain Parquet is simpler as a file format, but the README does not claim that it supplies Iceberg metadata or snapshot semantics. For that reason, Parquet is a reasonable destination only when the consuming system already supplies the table-management behavior that OLake Go does not add.

How OLake Go Moves Source Data

Based on the repository layout, OLake Go is implemented as a Go ingestion engine with connector, destination, protocol, type, utility, and driver packages. The root `connector.go`, `drivers/`, `destination/`, and `protocol/` directories indicate that source-specific logic is separated from destination and transport concerns. The `go.mod` file confirms that the project depends on clients and libraries for PostgreSQL, MySQL, MongoDB, AWS S3, Kafka, Parquet, gRPC, and related components.

For database sources, the documented mechanisms vary by system. PostgreSQL CDC uses `pgoutput`, while the README marks `wal2json` as deprecated. MySQL uses binlog-based CDC, and MongoDB uses Oplog-based CDC. MSSQL lists full load, CDC, and incremental support. Oracle and DB2 are described as JDBC-based for full load and incremental work, with Oracle CDC marked WIP. These differences mean that database replication is not one uniform feature. Source behavior, required privileges, and change metadata depend on the connector.

Kafka and S3 follow different data models from relational databases. Kafka is consumed from a stream and can be written through a bounded incremental path in the benchmark documentation. S3 is an object-store source rather than a transaction log, so its sync behavior cannot be assumed to provide the same CDC guarantees. OLake Go also documents exactly once delivery and Arrow writes as project capabilities, but the README does not define the recovery protocol or the exact consistency boundary for every source and destination combination. Those details require confirmation in the linked documentation.

Catalog Choices and Destination Configuration

The destination configuration is a central part of an Iceberg deployment because OLake Go does not treat storage and table metadata as the same concern. The README names Glue, Hive, JDBC, and REST catalogs. A catalog choice determines where Iceberg table metadata is registered, while the data files themselves can be written to compatible object storage. The repository files do not show a complete catalog configuration, so an engineer should not copy an assumed endpoint, warehouse path, credential variable, or port into production.

The repository examples are evidence of intended integration patterns. The top-level entries include examples for Presto with MinIO and MySQL, Spark with Tabular Rest and MinIO and MySQL, and Trino with Tabular Rest and MinIO and MySQL. These example directories indicate that the project is designed to feed query engines that read Iceberg tables, rather than serving query workloads itself.

That distinction is important. OLake Go does not replace Presto, Spark, or Trino. It prepares data for them. Query compatibility will depend on the catalog, metadata configuration, storage layout, and schema behavior. A pipeline can write a valid Parquet or Iceberg table and still be inconvenient if the downstream engine cannot discover its metadata or interpret its type mappings.

Deployment Path and First Use

The README directs users to `olake.io/docs` for documentation and says that deployment is available through Docker Compose. The repository includes a `Dockerfile`, `docker-compose.yml`, and example directories, so container-based deployment is part of the repository structure. The README does not provide a complete installation command, prerequisites, configuration template, credentials setup, or a first sync walkthrough. The project says to read its documentation and benchmarks at `olake.io/docs`; no unverified command is supplied here.

The `docker-compose.yml` file demonstrates the command shape expected by one MongoDB image. It mounts a driver example directory as `/mnt/config` and runs the `sync` command with four configuration paths. The file does not show the contents of those JSON files, so it is not a complete first-use tutorial.

A real first use should begin with the linked documentation for the selected connector. The reader should first confirm the source credentials and CDC permissions, then identify the catalog and object-storage destination, and only then start the sync. The repository's example paths can help locate configuration conventions, but the README is silent about required values and restart behavior.

Operational Limits and Failure Cases

The clearest limitation is source coverage. Oracle CDC is marked WIP, and DB2 does not list CDC support. A team that depends on continuous Oracle or DB2 change capture cannot assume parity with PostgreSQL, MySQL, MongoDB, or MSSQL. Another limitation is operational scope. OLake Go focuses on ingestion and table maintenance, not query execution or a complete analytics platform.

CDC also introduces requirements that a one-time file copy does not have. PostgreSQL uses `pgoutput`, MySQL relies on binlogs, and MongoDB relies on its Oplog. A deployment can fail or miss expected behavior if the source is not configured for the required change mechanism, if permissions are insufficient, or if log retention is shorter than the pipeline outage. The README does not document recovery checkpoints, replay procedures, or schema conflict handling in enough detail to make those guarantees independently clear.

The README does not document rollback for a deployment or for a bad destination schema. It also does not state how to reconcile a partially completed full load with a later CDC run. These omissions do not prove the features are absent, but they are concrete items to verify before production adoption.

OLake Go Compared with Spark, Flink, and Managed Replicators

OLake Go presents itself as an ingestion engine that avoids Spark, Flink, Kafka, and Debezium in the stated deployment model. That is a different design choice from running a general-purpose stream processor or managed replication service. It is aimed at moving supported sources into open table formats through a focused Go engine and its driver layout.

The alternative is not always another product with identical scope. A managed connector may provide a hosted control plane and support process, which OLake Go does not describe in the README. The trade-off is that those alternatives may add infrastructure or vendor dependencies, while OLake Go narrows the ingestion component and leaves query execution to systems such as Spark, Trino, or Presto.

The README includes benchmark comparisons with Fivetran and Flink. Those are project-published benchmark claims, not independent evidence used in this review. They should be evaluated through the linked reports, including workload shape, source configuration, file sizing, catalog, and CDC conditions.

License, Releases, and Upgrade Surface

OLake Go is distributed under the `Apache-2.0` license. That identifies the repository's declared license, but it is not a substitute for reviewing license obligations in a particular deployment, especially when the surrounding system includes separately licensed components. The repository contains a `LICENCE` file and uses third-party Go modules listed in `go.mod`.

The repository's maintenance record is current. The last push was on 2026-10-15, and recent releases include `v0.12.1` on 2026-10-15, `v0.12.0` on 2026-10-07, and `v0.11.3` on 2026-10-05. The repository is not archived. These facts indicate recent repository activity, but they do not establish compatibility of every connector with every release.

The main upgrade cost is configuration and validation. Go module dependencies, container images, source connectors, catalog integrations, and destination formats all need to be checked when moving between versions. The README does not define an upgrade compatibility matrix or a rollback procedure, so version changes should be treated as pipeline changes rather than routine binary replacement.

Editorial conclusion

OLake Go fits teams that need database, Kafka, or S3 ingestion into Apache Iceberg without adding Spark, Flink, Kafka, or Debezium to the ingestion layer. It is less suitable when Oracle or DB2 CDC is required, when a fully documented local install path is needed, or when a managed vendor with a fixed support contract is preferred. Verify the source connector, CDC permissions, catalog choice, schema evolution behavior, and restart procedure first. The repository was last pushed on 2026-10-15, so its release activity is recent, but that does not replace connector-specific compatibility checks.

Frequently asked questions

What does OLake Go replicate into Apache Iceberg?

OLake Go replicates supported transactional databases, Kafka, and S3 into Apache Iceberg or plain Parquet. The destination can use catalog integrations including Glue, Hive, JDBC, and REST catalogs, according to the README.

Which databases support CDC in OLake Go?

The README lists CDC support for PostgreSQL, MySQL, MongoDB, and MSSQL. Oracle CDC is marked WIP, while DB2 is listed without CDC support.

How does OLake Go handle PostgreSQL changes?

The README identifies `pgoutput` as PostgreSQL's CDC mechanism and marks `wal2json` as deprecated. It does not provide further PostgreSQL configuration or replay details in the README.

Does OLake Go include a query engine?

No query engine is identified in the project description. OLake Go is an ingestion engine, while the repository includes examples involving Spark, Trino, and Presto as downstream readers or consumers of the prepared data.

Can OLake Go write plain Parquet instead of Iceberg?

Yes. The README names Apache Iceberg and plain Parquet as destination formats. It does not state that plain Parquet includes Iceberg metadata, snapshots, or catalog behavior.

Official sources

  1. datazip-inc/olake on GitHub
  2. License: Apache-2.0
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/datazip-inc-olake.svg)](https://hysenlabs.com/projects/datazip-inc-olake)

Was this useful?