簡體   English   中英

Kafka 中的 stateStore.delete(key) 不起作用

[英]stateStore.delete(key) in Kafka is not working

我認為這是一個簡單的狀態存儲用例。 我們每 10 秒循環一次 state 存儲並嘗試發送給合作伙伴,如果我們收到 404,我們將在下一個時間間隔再次嘗試。 如果我們收到 200,我們會從 state 存儲中刪除該條目。

在我的測試中(statestore 中的 1 個條目)我首先讓它運行幾個循環,我們收到 404,只是為了測試重試是否有效。 當我將模擬端點切換為返回 200 時,我可以通過日志看到:stateStore.delete(key) 和 stateStore.flush() 都被調用了。 我什至在 stateStore.delete(key) 之后確認 stateStore.get(key) 返回一個 null 值(墓碑)。

然而,下一次標點符號運行時(10 秒),object 仍在 state 存儲中,整個塊再次被調用。 它一直像這樣循環,從不刪除 statestore 中的條目

@Override
public void punctuate(long l) {
    log.info("PeriodicRetryPunctuator started: " + l);

    try(KeyValueIterator<String, TestEventObject> iter = stateStore.all()) {
        while(iter.hasNext()) {
            KeyValue<String, TestEventObject> keyValue = iter.next();
            String key = keyValue.key;
            TestEventObject event = keyValue.value;
            
            try {
                log.info("Event: " + event);
                // Sends event over HTTP. Will throw HttpResponseException if 404 is received
                eventService.processEvent(event);
                
                stateStore.delete(key);
                stateStore.flush();
                
                // Check that statestore returns null
                log.info("Check: " + stateStore.get(key));
            } catch (HttpResponseException hre) {
                log.info("Periodic retry received 404. Retrying at next interval");
            }
            catch (Exception e) {
                e.printStackTrace();
                log.error("Exception with periodic retry: {}", e.getMessage());
            }
        }
    }
}

更新:

似乎是 Confluent 的加密庫導致了這些問題。 我已經完成了相當廣泛的 A/B 測試,每次出現時都是使用 Confluent 加密。 沒有我從來沒有遇到過這個問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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