Kafka Events
22 event topics (11 producer + 11 consumer) across the notification delivery pipeline.
Event Format: CloudEvents 1.0
All events follow the CloudEvents 1.0 specification. Events are partitioned by tenant_id and published to Amazon MSK Serverless. Idempotency enforced via Redis with 24h TTL.
Brokers
| Environment | Broker |
|---|---|
| Staging | b-1.eventzr-msk.ap-south-1.amazonaws.com:9098 |
| Production | b-1.eventzr-msk-prod.ap-south-1.amazonaws.com:9098 |
CloudEvents Envelope
CloudEvents 1.0 envelopejson
{
"specversion": "1.0",
"type": "eventzr.notify.sent.v1",
"source": "eventzr.notify-svc",
"id": "evt-550e8400-e29b-41d4-a716-446655440000",
"time": "2026-02-24T12:00:00.000Z",
"datacontenttype": "application/json",
"subject": "tenant-uuid",
"data": {
"tenantId": "tenant-uuid",
"notificationId": "notif-uuid",
"channel": "email",
"userId": "user-uuid",
"templateId": "template-uuid",
"priority": "high"
}
}Producer Topics (11)
Events published by notify-svc when notification state changes occur. Downstream consumers: analytics-svc, wallet-svc, inbox-svc, audit-svc, crm-svc, amplify-svc, search-svc.
Delivery Lifecycle7
| Topic | Description |
|---|---|
eventzr.notify.sent.v1 | Notification sent to CPaaS provider |
eventzr.notify.delivered.v1 | Delivery confirmed by provider |
eventzr.notify.failed.v1 | All retries exhausted |
eventzr.notify.bounced.v1 | Hard/soft bounce from provider |
eventzr.notify.read.v1 | Recipient opened notification |
eventzr.notify.cost_incurred.v1 | CPaaS cost recorded |
eventzr.notify.suppressed.v1 | Notification suppressed (opt-out, bounce, suppression list) |
Template Lifecycle3
| Topic | Description |
|---|---|
eventzr.notify.template.created.v1 | Template created |
eventzr.notify.template.updated.v1 | Template updated |
eventzr.notify.template.deleted.v1 | Template soft-deleted |
Preference Changes1
| Topic | Description |
|---|---|
eventzr.notify.preference.updated.v1 | User preferences changed |
Consumer Topics (11)
Events consumed from 6 upstream services to trigger notifications.
auth-svcGroup: notify-svc-auth-consumer
| Topic | Description | SLA |
|---|---|---|
eventzr.auth.otp.requested.v1 | Send OTP via preferred channel | 10s (CRITICAL) |
booking-svcGroup: notify-svc-booking-consumer
| Topic | Description | SLA |
|---|---|---|
eventzr.booking.confirmed.v1 | Send booking confirmation | 1min (HIGH) |
eventzr.booking.checkin_time.v1 | Send check-in reminder (T-24h) | 1min (HIGH) |
event-svcGroup: notify-svc-event-consumer
| Topic | Description | SLA |
|---|---|---|
eventzr.events.published.v1 | Notify followers about new event | 5min (NORMAL) |
eventzr.events.updated.v1 | Notify ticket holders about changes | 1min (HIGH) |
eventzr.events.cancelled.v1 | Notify holders with refund info | 1min (HIGH) |
invite-svcGroup: notify-svc-invite-consumer
| Topic | Description | SLA |
|---|---|---|
eventzr.invite.sent.v1 | Send event invitation | 5min (NORMAL) |
ticketing-svcGroup: notify-svc-ticketing-consumer
| Topic | Description | SLA |
|---|---|---|
eventzr.ticketing.ticket.purchased.v1 | Send ticket confirmation + QR code | 1min (HIGH) |
eventzr.ticketing.ticket.transferred.v1 | Notify both parties of transfer | 1min (HIGH) |
wallet-svcGroup: notify-svc-wallet-consumer
| Topic | Description | SLA |
|---|---|---|
eventzr.wallet.transaction.completed.v1 | Send payment receipt | 1min (HIGH) |
eventzr.wallet.balance.low.v1 | Send low balance alert | 1min (HIGH) |