Идемпотентность. Брокер может доставить событие повторно (после сбоя потребителя до фиксации смещения). Проекция должна выдерживать повтор: хранить последнюю применённую версию агрегата и пропускать события не новее её, или делать операции идемпотентными по смыслу (UPSERT с полями из события, а не +1).
Порядок. События одного агрегата должны применяться в порядке их возникновения. Брокер гарантирует порядок только внутри партиции, поэтому ключ партиционирования — id агрегата. Между разными агрегатами порядок не гарантирован, и проекция не должна на него рассчитывать.
Много проекций — это нормально. Каждая заточена под свой сценарий (список заказов, поиск, отчёт по выручке), не мешает другим и может храниться в подходящем хранилище. Новый экран — новая проекция, без миграции основной модели.
Перестроение. Ошибку в проекции исправляют, проиграв все события заново. На больших объёмах: собрать новую версию проекции параллельно со старой (в новую таблицу или индекс), догнать текущий поток, переключить чтение, удалить старую. Это требует хранить события достаточно долго (хранилище событий или Kafka с длинным хранением / compaction).
Наблюдаемость: отставание по каждой проекции и ошибки обработки, очередь недоставленных для «ядовитых» событий.