PostHog's architecture

Last updated:

|Edit this page

This section covers PostHog's data model, ingestion pipeline, ClickHouse setup and data querying. This page provides an overview of how PostHog is structured.

Broad overview

There are only a few systems to consider.

  • A website and API for users
  • An API for client apps
  • A plugin service for processing events on ingestion
  • A worker service for processing events in response to triggers
User
Client Apps/SDKs
Export Sink
Web/API
plugin/worker service
Celery
Data stores

Zooming closer

Adding detail reveals the flow between parts of the system.

plugin/worker service
Web/API
views insights and more
send events
read
write events
onEvent
save events
onTimer
export events
e.g. read flags
read events
start task
on schedule
Ingestion
Async
timer
Web
Capture API
Decide API
cron
Celery
User
Client Apps/SDKs
Export Sink
Data stores

Zoomed right in

K8s PostHog namespace
K8s Services
K8s Services
Other traffic
Events endpoint
Write path
Read path
Optional Utilization telemetry
Ingress
Postgres Stateful service
Kafka Stateful Service
Kafka Stateful Service
Redis SS
Service Load Balancer
Service Load Balancer
K8s Services
PGBouncer
ClickHouse Cluster (Operator Managed)
Replica 1 Shard 1
Replica 1 Shard 2
Replica 2 Shard 1
Replica 2 Shard 2
K8s ZooKeeper cluster
ZK1
ZK2
ZK3
Plugin Service
Worker Service
Events Service
Web Service
Client Apps
Posthog License Telemetry service

No communication is needed into or out of this namespace other than the ingress controller for the app and collecting data.

Questions?

Was this page useful?

Next article

Data model

PostHog’s data model starts with events , single actions that a user performed at a specific point in time. These are sent either from one of our SDKs or directly via our API . These are flexible: they can be captured automatically, via auto-capture , or you can emit your own custom events , attaching additional metadata via properties . You might create an event to represent purchasing an upgrade, with custom properties like price or renewal_period . Meanwhile, users of your product…

Read next article