[英]filter Json messages from kafka consumer efficiently
我正在閱讀來自 Kafka stream 的 Json 對象的日志。 以下是每條消息的格式:
{"class": "abc.cdf", "object":{....}}
我對僅占收到的總消息的 10% 的特定“類別”消息感興趣。 如何在不為每條新消息解析整個 json 的情況下有效地過濾掉基於該字段的消息?
目前我正在使用 ByteArraySerializer 和 ObjectMapper 解析到 json pojo,然后專門驗證“類”字段。 從 Kafka 讀取的每批消息之后的示例代碼:
ObjectMapper mapper = new ObjectMapper();
for (record : records) {
MyRecord parsedRec = mapper.readValue(record, MyRecord.class);
if (parsedRec == null || (!MYCLASSNAME.equals(parsedRec.getClass())))
continue;
...
}
鑒於消息 stream 的負載,我想花最少的時間過濾掉不感興趣的消息。
一種方法是僅解析class
字段並忽略 rest。 因此,您使用僅包含class
字段的新 class RecordClass
並將映射器配置為不會在未知屬性(即object
)上失敗。
ObjectMapper mapper = new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
RecordClass recordClass = mapper.readValue(record, RecordClass.class);
然后,僅當RecordClass
具有正確的 class 時,才解析完整的MyRecord
。 邏輯上應該更快,但在實踐中你需要測試它。
另一種方法是將具有特定 class 的消息發送到另一個主題,因此您基本上在生產者端進行過濾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.