Влияет ли размер FlowFile на ввод-вывод - PullRequest
0 голосов
/ 17 января 2019

Каковы будут факторы, учитывающие размер FlowFile? Влияет ли это на ввод-вывод, и чем оно больше, тем лучше, если достаточно памяти? потому что NIFI сохраняется для каждого FlowFile с диска в память?

Специально для Kafka Consumer Processor он содержит свойство с именем Message Demarcator. С настройкой один FlowFile может содержать много событий, а без него один FlowFile содержит только одно событие. Допустим, было бы более производительным, если бы FlowFile содержал 1000 объектов json, чем 1 объект json?

Эта часть меня смущает, особенно этот документ https://community.hortonworks.com/questions/21011/how-i-extract-attribute-from-json-file-using-nifi.html

Это говорит о необходимости сохранения значения json в FlowFile Атрибуте, который означает, что он обрабатывает один объект Json на FlowFile, а один FlowFile содержит один объект Json. Потому что если FlowFile имеет более одного объекта json, ему придется создать столько же атрибутов, сколько объектов json. например, у каждого объекта json есть поле метки времени, называемое occurred_at, тогда ему нужно будет создать occurred_at_1 occurred_at_2 и т. д.

1 Ответ

0 голосов
/ 17 января 2019

Вы увидите значительное улучшение производительности, если вы сможете хранить много сообщений вместе в одном файле потока. Например, допустим, вы потребляете 1 миллион сообщений от Kafka и имеете по одному сообщению на файл потока, это означает, что 1 миллион записей в репо файла потока, 1 миллион событий провенанса, 1 миллион объектов в куче и т. Д. Если у вас было 1 Потоковый файл с 1 миллионом сообщений, это будет 1 запись в репозиторий потокового файла, 1 событие провенанса, 1 объект в куче (не содержимое).

Когда у вас есть много сообщений в одном поточном файле, вы не можете извлечь значение поля в атрибут, поскольку, как вы указали, для каждой записи будут разные значения для поля. Вы можете обойти это, используя процессоры записей, которые позволяют обрабатывать записи на месте. Например, вместо EvaluateJsonPath + RouteOnAttribute вы можете просто использовать PartitionRecord для разделения сообщений на основе значения поля.

...