obmp-docker/postgres/scripts/009_kafka_lag.sql

40 lines
1.6 KiB
MySQL
Raw Normal View History

-- 009_kafka_lag.sql
-- Kafka consumer-group lag history for the OpenBMP ingestion path, written by
-- the kafka-lag-monitor service every ~30s. Backs the Kafka Lag dashboard so
-- the ingestion path can be sanity-checked: watch lag spike during a BGP
-- convergence storm and drain again, and confirm the consumer member count
-- when psql-app is scaled out.
CREATE TABLE IF NOT EXISTS kafka_consumer_lag (
ts timestamptz NOT NULL DEFAULT now(),
group_id varchar(128) NOT NULL,
topic varchar(200) NOT NULL,
partition integer NOT NULL,
committed bigint,
log_end bigint,
lag bigint
);
CREATE TABLE IF NOT EXISTS kafka_consumer_members (
ts timestamptz NOT NULL DEFAULT now(),
group_id varchar(128) NOT NULL,
members integer
);
SELECT create_hypertable('kafka_consumer_lag', 'ts', if_not_exists => TRUE);
SELECT create_hypertable('kafka_consumer_members', 'ts', if_not_exists => TRUE);
CREATE INDEX IF NOT EXISTS idx_kafka_lag_group_ts
ON kafka_consumer_lag (group_id, ts DESC);
CREATE INDEX IF NOT EXISTS idx_kafka_members_group_ts
ON kafka_consumer_members (group_id, ts DESC);
-- Bound history growth (~250k rows/day across ~88 partitions at 30s). Wrapped
-- so the script still succeeds if the TimescaleDB job scheduler is unavailable.
DO $$ BEGIN
PERFORM add_retention_policy('kafka_consumer_lag', INTERVAL '14 days');
PERFORM add_retention_policy('kafka_consumer_members', INTERVAL '14 days');
EXCEPTION WHEN OTHERS THEN
RAISE NOTICE 'kafka lag retention policy not added: %', SQLERRM;
END $$;