В настоящее время моя настройка следующая:
- один модуль чтения Kafka, один процессор элементов, один модуль записи JDBC (пользовательский)
- читатель Kafka считывает элементы из Kafka
- размер фрагмента равен 25
Теперь 1 элемент Kafka содержит 1...n дочерних элементов. Размер этого дочернего элемента не фиксирован, он различен для каждого прочитанного элемента Kafka.
Каждый элемент Kafka сглаживается в моем процессоре, так что процессор возвращает список дочерних элементов.
Затем писатель получает список дочерних элементов полного фрагмента.
Пока все хорошо.
Это означает, что каждый раз, когда мой писатель выполняет запись в базу данных, количество элементов то, что на самом деле написано, может быть разным. Один раз он может записать 150 элементов, в следующий фрагмент — только 50 элементов и так далее.
Есть ли способ создать модуль записи, который записывает в базу данных только при достижении определенного порога дочерних элементов?
Например, я хочу, чтобы модуль записи записывал дочерние элементы, если достигнуто минимальное количество элементов в 1000. Таким образом, я хочу повысить производительность записи при записи в мою базу данных Postgres.
По сути, я хочу агрегировать операцию записи для нескольких фрагментов, сохраняя при этом поведение фиксации Spring Batch.
У меня возникла идея написать собственный модуль записи, который использует некоторый внутренний буфер. Но я не могу разобраться в поведении фиксации/транзакции Spring Batch. Как мне сообщить Spring Batch, что он фиксирует записанные элементы только тогда, когда писатель действительно записывает данные после достижения порога? Возможно, это просто невозможно.
Подробнее здесь: https://stackoverflow.com/questions/797 ... s-after-re
Мобильная версия