This module implements real-time platform metrics using Kafka, ClickHouse, Redis, and WebSockets with graceful degradation.
The analytics pipeline provides:
- Real-time event ingestion with streaming (Kafka)
- High-performance analytics storage (ClickHouse)
- Fast metric caching (Redis)
- Query endpoints for dashboards (REST API)
- Graceful degradation when services are unavailable
- Splits per second - Split creation rate
- Active users - Unique users in time window
- Payment success rate - Payment completion percentage
- Average settlement time - Time from initiation to completion
- Geographic distribution - User location analytics
- Funnel conversions - User journey analytics
- Retention cohorts - User retention over time
- Event trends - Time-series event patterns
- Apache Kafka (kafkajs) - Streaming event ingestion
- ClickHouse (@apla/clickhouse) - Analytics storage and queries
- Redis (ioredis) - Metrics caching
- WebSockets - Real-time event delivery
Application → AnalyticsIngestService → Kafka → Consumer → ClickHouse
↓
Redis Cache
↓
Analytics Controller
The service tracks availability of each component:
kafka- Kafka streaming (optional)clickhouse- ClickHouse storage (optional)redis- Redis caching (optional)
The system operates with any combination of available services. See docs/REALTIME_ANALYTICS.md for details.
analytics-ingest.service.ts- Main service for event ingestion and queriesanalytics.controller.ts- REST API endpoints for analytics queriesanalytics.ingest.ts- Kafka consumer for metrics ingestionanalytics.cache.ts- Redis caching utilitiesanalytics-events.ts- Event types and ClickHouse schemaanalytics.aggregate.ts- Aggregation logicanalytics.websocket.ts- WebSocket deliveryanalytics.metrics.ts- Metrics definitions
GET /analytics/health- Check service status and feature availability
GET /analytics/metrics- Query metrics with filtersPOST /analytics/funnel- Funnel analysisGET /analytics/retention- Retention cohort analysisGET /analytics/trends- Time-series trendsGET /analytics/dashboard/daily- Daily summary for dashboard
See docs/REALTIME_ANALYTICS.md for detailed API documentation.
split.created,split.updated,split.completed,split.deleted,split.shared
item.added,item.updated,item.deleted
payment.initiated,payment.completed,payment.failed,payment.refunded
participant.joined,participant.left,participant.settled
user.registered,user.login,user.logout,user.profile.updated
search.performed,filter.applied
page.viewed,button.clicked,error.occurred
import { AnalyticsIngestService } from "./realtime-analytics";
await analyticsIngest.trackEvent(
AnalyticsEventType.SPLIT_CREATED,
{ splitId: "123", totalAmount: 100 },
{ userId: "user-456", source: "api" },
);GET /analytics/metrics?dateFrom=2026-04-21&dateTo=2026-04-28# Kafka (optional)
KAFKA_BROKERS=localhost:9092
# ClickHouse (optional)
CLICKHOUSE_HOST=localhost
CLICKHOUSE_PORT=8123
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=
CLICKHOUSE_DB=analytics
# Redis (optional)
REDIS_URL=redis://localhost:6379- If Kafka unavailable: Events stored directly in ClickHouse
- If ClickHouse unavailable: Queries return fallback metrics
- If Redis unavailable: Queries hit ClickHouse directly (slower)
- Raw events: 90 days (ClickHouse TTL)
- Aggregated metrics: 1 year
- Daily aggregates: 3 years
analytics.test.ts- Unit tests- See docs/REALTIME_ANALYTICS.md for testing guide
For comprehensive documentation including:
- Ingestion pipeline details
- Caching strategy
- Query endpoint specifications
- Fallback mechanisms
- Deployment dependencies
- Troubleshooting guide