Разделы Tha Kafka определяются как «неизменяемые», ссылаясь на тот факт, что производитель может просто добавлять сообщения к самому разделу и не изменять значение для существующего (т. Е. С тем же ключом). Сам раздел является журналом фиксации, работающим только в режиме добавления с точки зрения производителя. Конечно, это означает, что без каких-либо механизмов, таких как удаление (по времени хранения) и сжатие, размер раздела может расти бесконечно. В этот момент вы можете подумать .. "так что это не является неизменным!"как вы упомянули. Ну, как я уже сказал, неизменность с точки зрения производителя. Удаление и уплотнение являются административными операциями. Например, удаление записей также возможно с использованием Admin Client API ... но мы всегда говорим о административных вещах, а не о материалах, связанных с производителем / потребителем.
Если вы думаете о сжатии и о том, как оно работает, производительпервоначально отправляет, например, сообщение с ключом = A и полезной нагрузкой = "Hello". Через некоторое время, чтобы «обновить» значение, он отправляет новое сообщение с тем же ключом = A и payload = «Hi» ... но на самом деле это действительно новое сообщение, добавляемое в конец журнала раздела;это будет поток сжатия в брокере, выполняющий работу по удалению старого сообщения с полезной нагрузкой «Hello», оставляя только новое. Таким же образом производитель может отправить сообщение с ключом = A и полезной нагрузкой = null. Это способ фактически удалить сообщение (ноль называется "надгробная плита"). В любом случае, производитель все еще добавляет новое сообщение в раздел;это всегда поток уплотнения, который удалит последнее сообщение с ключом = A, когда увидит надгробную плиту.