簡體   English   中英

有效過濾來自 kafka 消費者的 Json 消息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM