-- IM Kafka foundation tables for tenant databases. -- Date: 2026-08-26 -- Scope: run once in every tenant business database, such as tinode. -- Notes: -- * Do not run in hotgo. Admin/HotGo side needs its own admin_command/outbox tables. -- * Tables do not contain tenant_id because each tenant has an independent database. CREATE TABLE IF NOT EXISTS im_kafka_consume_log ( id BIGINT NOT NULL AUTO_INCREMENT, event_id VARCHAR(96) NOT NULL, consumer_group VARCHAR(128) NOT NULL, source_topic VARCHAR(128) NOT NULL, event_type VARCHAR(96) NOT NULL DEFAULT '', biz_type VARCHAR(64) NOT NULL DEFAULT '', biz_id VARCHAR(128) NOT NULL DEFAULT '', status VARCHAR(16) NOT NULL DEFAULT 'processing', retry_count INT NOT NULL DEFAULT 0, last_reason VARCHAR(64) NOT NULL DEFAULT '', last_error VARCHAR(1000) NOT NULL DEFAULT '', processing_deadline DATETIME(3), succeeded_at DATETIME(3), dead_at DATETIME(3), created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), PRIMARY KEY(id), UNIQUE INDEX uk_im_kafka_consume_log_event_group(event_id, consumer_group), INDEX idx_im_kafka_consume_log_status(status, processing_deadline), INDEX idx_im_kafka_consume_log_biz(biz_type, biz_id), INDEX idx_im_kafka_consume_log_topic(source_topic, id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; CREATE TABLE IF NOT EXISTS im_kafka_dead_letters ( id BIGINT NOT NULL AUTO_INCREMENT, dead_id VARCHAR(96) NOT NULL, event_id VARCHAR(96) NOT NULL, parent_event_id VARCHAR(96) NOT NULL DEFAULT '', source_topic VARCHAR(128) NOT NULL, consumer_group VARCHAR(128) NOT NULL, event_type VARCHAR(96) NOT NULL DEFAULT '', biz_type VARCHAR(64) NOT NULL DEFAULT '', biz_id VARCHAR(128) NOT NULL DEFAULT '', envelope JSON NOT NULL, retry_count INT NOT NULL DEFAULT 0, last_reason VARCHAR(64) NOT NULL DEFAULT '', last_error VARCHAR(1000) NOT NULL DEFAULT '', status VARCHAR(24) NOT NULL DEFAULT 'dead', replay_count INT NOT NULL DEFAULT 0, resolved_by VARCHAR(64) NOT NULL DEFAULT '', resolved_at DATETIME(3), resolve_note VARCHAR(1000) NOT NULL DEFAULT '', created_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), updated_at DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3), PRIMARY KEY(id), UNIQUE INDEX uk_im_kafka_dead_letters_dead(dead_id), INDEX idx_im_kafka_dead_letters_event(event_id), INDEX idx_im_kafka_dead_letters_status(status, created_at), INDEX idx_im_kafka_dead_letters_biz(biz_type, biz_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;