CDC Apache Cassandra в текущей версии хитрый.
Журнал фиксации является «глобальным», что означает, что изменения в любой таблице сохраняются в том же журнале фиксации.
- Ваш сегмент журнала фиксации может (и будет) содержать журналы из таблиц, отличных от таблиц с включенным CDC. К ним относятся системные таблицы.
- Сегмент журнала фиксации удаляется и перемещается в каталог
cdc_raw
после очистки всех журналов в сегменте журнала фиксации.
Таким образом, даже если вы настраиваете свою таблицу с поддержкой CDC для сброса каждые 10 секунд, журналы из других таблиц все еще находятся в том же сегменте журнала фиксации, что препятствует перемещению журнала фиксации в каталог CDC.
Нет способа изменить поведение, кроме как попытаться ускорить процесс, уменьшив commitlog_segment_size_in_mb
(но вы должны быть осторожны, чтобы не уменьшить его до размера, меньшего, чем ваш единичный реквизит записи).
Это поведение улучшено и будет выпущено в следующей основной версии v4.0. Вы можете читать свой CDC так же быстро, как синхронизируется журнал фиксации на диск (поэтому, когда вы используете periodic
синхронизация журнала фиксации, вы можете читать свои изменения каждые commit_log_sync_period_in_ms
миллисекунды.
Подробнее см. CASSANDRA-12148 .
Кстати, вы устанавливаете commitlog_total_space_in_mb
на 2, что я определенно не рекомендую. Сейчас вы видите, что Cassandra очищает каждую таблицу, когда размер вашего журнала фиксации превысил это значение, чтобы освободить место. Если вы не можете восстановить свое место в журнале коммитов, то Кассандра начнет выдавать ошибку и отклоняет записи.