Если вы используете TimeBasedPartitioner, и сообщения не всегда будут иметь растущие временные метки, то в результате вы получите файлы с одной записывающей задачей, которые будут выгружать файлы, когда он увидит сообщение с меньшей временной меткой в интервале rotate.interval.ms
чтения любой данной записи.
Если вы хотите иметь согласованные двухчасовые окна разделов, то вы должны использовать rotate.interval.ms=-1
, чтобы отключить его, а затем rotate.schedule.interval.ms
до некоторого разумного числа, которое находится в пределах окна продолжительности раздела.
например. у вас 7200 сообщений каждые 2 часа, и неясно, насколько велико каждое сообщение, но скажем, 1 МБ. Затем вы будете хранить ~ 7 ГБ данных в буфере, и вам нужно будет настроить размеры кучи Connect для хранения такого количества данных.
Порядок присутствия
- плановое вращение, начиная с верхней части часа
- размер сброса или «основанное на сообщении» вращение времени, в зависимости от того, что произойдет раньше, или есть запись, которая рассматривается как «до» начала текущей партии
И я считаю, что размер флеша обязателен для разъемов хранения
В целом, такие системы, как Uber's Hudi или предыдущий инструмент Camus Sweeper Kafka-HDFS, более приспособлены для обработки небольших файлов. Задачи Connect Sink Tasks заботятся только об использовании Kafka и записи в нисходящие системы; сама структура не распознает, Hadoop предпочитает файлы большего размера.