Analytics Sync. Keep OLTP thin: publish fat events once to Kafka. Any number of sinks consume them.
OLTP --EventPublisher--> Kafka --group A--> ClickHouse
└──── --group B--> other warehouse
Kafka is the product boundary. ClickHouse is a reference sink, not the architecture.
| Module | Layer |
|---|---|
event-connector-starter |
Core. Inject EventPublisher. |
sinks/clickhouse-batch-sink |
Optional. Batch JDBC into ClickHouse. |
Java 21, Spring Boot 3.4, Maven. Group io.anasy.
| Doc | Read when |
|---|---|
| docs/PLAN.md | Locked decisions |
| docs/hld.md | Architecture, fan-out |
| docs/lld.md | Starter, publisher, how to add a sink |
| docs/scaling.md | Partitions, groups, per-sink tuning |
| docs/sinks/clickhouse.md | ClickHouse config, schema, queries |
| AGENTS.md | Agent rules |
- Run Kafka. Depend on
event-connector-starter. - Publish:
events.publish("orders.events", order.id().toString(), fatEvent);- Add a sink: new app, unique
group-id, writerecord.key()aseventId. ClickHouse: applydocs/sinks/clickhouse.sqland runclickhouse-batch-sink.
