explaingit

el10savio/duckwatch

Analysis updated 2026-05-18

0GoAudience · ops devopsComplexity · 4/5Setup · hard

TLDR

duckWatch monitors a DuckLake's live Postgres catalog in real time, capturing in-progress transactions, lock contention, and commit conflicts via CDC and a Go poller, visualized in Superset.

Mindmap

mindmap
  root((duckWatch))
    What it does
      Live DuckLake observability
      Tracks in-flight transactions
      Tracks lock contention
      Tracks commit conflicts
    Tech stack
      Go
      Postgres
      Debezium
      Kafka
      ClickHouse
      Superset
    Use cases
      Catalog change tracking
      Contention monitoring
      Load testing writers
    Setup
      Docker Compose
      Go 1.25
      Make commands

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

What do people build with it?

USE CASE 1

Watch a DuckLake's Postgres catalog for live lock contention and commit conflicts as writers race to commit.

USE CASE 2

Capture committed catalog changes such as new snapshots and file statistics through change data capture.

USE CASE 3

Load-test a DuckLake setup with configurable writers and observe contention build up in a dashboard.

What is it built with?

GoPostgresDebeziumKafkaClickHouseSupersetDocker

How does it compare?

el10savio/duckwatch42wim/fabio42wim/go-xmpp
Stars0
LanguageGoGoGo
Last pushed2018-02-042020-01-24
MaintenanceDormantDormant
Setup difficultyhardmoderatemoderate
Complexity4/53/53/5
Audienceops devopsops devopsdeveloper

Figures from each repo's GitHub metadata at analysis time.

How do you get it running?

Difficulty · hard Time to first run · 1h+

Requires Docker Compose v2, Go 1.25, and running multiple connected services (Kafka, ClickHouse, Superset).

No license is stated in the README, so usage rights are unclear.

In plain English

duckWatch gives you real-time visibility into what is happening inside a DuckLake, a data lake format that uses a live Postgres database as its catalog instead of a plain file. Because the catalog is an actual running database, it can show things a file-based catalog simply cannot capture, such as transactions that are still in progress, lock contention between concurrent writers, and how often writers collide and have to retry when they race to commit changes at the same time. The project watches this catalog in two ways at once. First, it uses a tool called Debezium to tail the Postgres write-ahead log through change data capture, which means it picks up every committed change to the catalog, like new snapshots and file statistics, as it happens. Second, a small Go program regularly polls Postgres system views that report on active queries, current locks, and database activity, which surfaces the live, in-progress state that committed-change tracking alone would miss. Both streams of information flow through Kafka and land in ClickHouse, a database built for fast analytical queries, where they populate separate sets of tables for the committed-change data and the live-activity data. From there, a Superset dashboard lets you explore the results visually, for example watching how contention and conflict rates change as you add more concurrent writers. To try it out, you need Docker Compose v2 and Go 1.25 installed. A set of make commands handles the whole lifecycle: one command sets up the full pipeline end to end, another brings up the Superset dashboard on your local machine, another lets you generate a configurable load of requests and writers to see contention build up, and a final command tears everything down and removes the volumes when you are finished. This is a young, small project with no stated license or broader documentation beyond the setup steps and architecture diagram in the README, so treat it as an experimental tool for exploring DuckLake internals rather than a finished product.

Copy-paste prompts

Prompt 1
Walk me through what duckWatch's Docker Compose setup installs and how the pieces connect.
Prompt 2
Explain the difference between the CDC path and the stats-polling path in duckWatch's architecture.
Prompt 3
Help me write a make target that runs duckWatch's load generator with a custom number of writers.
Prompt 4
What Postgres system views does duckWatch poll, and what do pg_stat_activity and pg_locks tell me?

Frequently asked questions

What is duckwatch?

duckWatch monitors a DuckLake's live Postgres catalog in real time, capturing in-progress transactions, lock contention, and commit conflicts via CDC and a Go poller, visualized in Superset.

What language is duckwatch written in?

Mainly Go. The stack also includes Go, Postgres, Debezium.

What license does duckwatch use?

No license is stated in the README, so usage rights are unclear.

How hard is duckwatch to set up?

Setup difficulty is rated hard, with roughly 1h+ to a first successful run.

Who is duckwatch for?

Mainly ops devops.

Open on GitHub → Explain another repo

This repo across BitVibe Labs

Verify against the repo before relying on details.