Nifi:MergeRecord 不会等待并将 json 个文件分组为一批
Nifi: MergeRecord doesn't wait and group up json files to one batch
我遇到了 Apache NiFi 的问题。
我有大约 100.000k+ json 个文件,如下所示:
[ {
"client_customer_id" : 8385419410,
"campaign_id" : "11597209433",
"resourceName" : "customers/8385419410/adGroupAds/118322191652~479093457035",
"campaign" : "11597209433",
"clicks" : "0",
"topImpressionPercentage" : 1,
"videoViews" : "0",
"conversionsValue" : 0,
"conversions" : 0,
"costMicros" : "0",
"ctr" : 0,
"currentModelAttributedConversions" : 0,
"currentModelAttributedConversionsValue" : 0,
"engagements" : "0",
"absoluteTopImpressionPercentage" : 1,
"activeViewImpressions" : "0",
"activeViewMeasurability" : 0,
"activeViewMeasurableCostMicros" : "0",
"activeViewMeasurableImpressions" : "0",
"allConversionsValue" : 0,
"allConversions" : 0,
"averageCpm" : 0,
"gmailForwards" : "0",
"gmailSaves" : "0",
"gmailSecondaryClicks" : "0",
"impressions" : "2",
"interactionRate" : 0,
"interactions" : "0",
"status" : "ENABLED",
"ad.resourceName" : "customers/8385419410/ads/479093457035",
"ad.id" : "479093457035",
"adGroup" : "customers/8385419410/adGroups/118322191652",
"device" : "DESKTOP",
"date" : "2020-11-25"
} ]
在一个一个保存到数据库之前,我想创建一个包含 1,000-10,000 个元素的批处理 json 然后保存到数据库以提高速度。
MergeRecord
设置:
我的期望是什么: MergeRecord
等待一些时间来分组 json 以创建一个包含 1000-10000 个元素的批处理 json,然后将此批次发送到 PutDatabaseRecord
处理器。
实际行为: MergeRecord
立即将 json 一个接一个地发送给 PutDatabaseRecord
,而无需分组和加入。
1/10 流文件将包含多个 json 个文件作为一个文件,正如您在屏幕截图中看到的大小一样。但似乎处理器的这些设置并不适用于所有文件:
我不明白哪里出了问题。 MergeRecord
设置或 json 文件?这真的很慢,我的数据(1.5 Gb)可能会在 1 天内存储。
我可以复制它的唯一方法是对每个流文件使用随机 table.name,这会导致每个文件都在它自己的容器中,迅速填满你的“最大容器数” ,并导致每个文件作为单独的流文件发送。如果您有超过 10 个表,我会增加该设置。
我唯一的其他建议是使用 运行 计划和 运行 MergeRecord 处理器的持续时间(在计划选项卡上)。如果您将 运行 计划设置为 2 分钟(例如),处理器将每两分钟 运行 一次并尝试合并队列中尽可能多的文件。
我遇到了 Apache NiFi 的问题。 我有大约 100.000k+ json 个文件,如下所示:
[ {
"client_customer_id" : 8385419410,
"campaign_id" : "11597209433",
"resourceName" : "customers/8385419410/adGroupAds/118322191652~479093457035",
"campaign" : "11597209433",
"clicks" : "0",
"topImpressionPercentage" : 1,
"videoViews" : "0",
"conversionsValue" : 0,
"conversions" : 0,
"costMicros" : "0",
"ctr" : 0,
"currentModelAttributedConversions" : 0,
"currentModelAttributedConversionsValue" : 0,
"engagements" : "0",
"absoluteTopImpressionPercentage" : 1,
"activeViewImpressions" : "0",
"activeViewMeasurability" : 0,
"activeViewMeasurableCostMicros" : "0",
"activeViewMeasurableImpressions" : "0",
"allConversionsValue" : 0,
"allConversions" : 0,
"averageCpm" : 0,
"gmailForwards" : "0",
"gmailSaves" : "0",
"gmailSecondaryClicks" : "0",
"impressions" : "2",
"interactionRate" : 0,
"interactions" : "0",
"status" : "ENABLED",
"ad.resourceName" : "customers/8385419410/ads/479093457035",
"ad.id" : "479093457035",
"adGroup" : "customers/8385419410/adGroups/118322191652",
"device" : "DESKTOP",
"date" : "2020-11-25"
} ]
在一个一个保存到数据库之前,我想创建一个包含 1,000-10,000 个元素的批处理 json 然后保存到数据库以提高速度。
MergeRecord
设置:
我的期望是什么: MergeRecord
等待一些时间来分组 json 以创建一个包含 1000-10000 个元素的批处理 json,然后将此批次发送到 PutDatabaseRecord
处理器。
实际行为: MergeRecord
立即将 json 一个接一个地发送给 PutDatabaseRecord
,而无需分组和加入。
1/10 流文件将包含多个 json 个文件作为一个文件,正如您在屏幕截图中看到的大小一样。但似乎处理器的这些设置并不适用于所有文件:
我不明白哪里出了问题。 MergeRecord
设置或 json 文件?这真的很慢,我的数据(1.5 Gb)可能会在 1 天内存储。
我可以复制它的唯一方法是对每个流文件使用随机 table.name,这会导致每个文件都在它自己的容器中,迅速填满你的“最大容器数” ,并导致每个文件作为单独的流文件发送。如果您有超过 10 个表,我会增加该设置。
我唯一的其他建议是使用 运行 计划和 运行 MergeRecord 处理器的持续时间(在计划选项卡上)。如果您将 运行 计划设置为 2 分钟(例如),处理器将每两分钟 运行 一次并尝试合并队列中尽可能多的文件。