Kafka API 0.10.1:LinkKafkaProducer onCompletion()回調是否總是在同一個線程中執行?
有沒有保證onCompletion回調在同一個線程中被順序調用?該文檔說「請注意,回調通常會在生產者的I/O線程中執行」。所以我會認爲不。
如果我想跟蹤保持一個整數計數器發生的異常數量,是否需要使用AtomicInteger?
或者,如果我想保留一個布爾標誌來跟蹤是否在最後一次回調中發生異常,我是否需要使其變爲volatile?
Kafka API 0.10.1:LinkKafkaProducer onCompletion()回調是否總是在同一個線程中執行?
有沒有保證onCompletion回調在同一個線程中被順序調用?該文檔說「請注意,回調通常會在生產者的I/O線程中執行」。所以我會認爲不。
如果我想跟蹤保持一個整數計數器發生的異常數量,是否需要使用AtomicInteger?
或者,如果我想保留一個布爾標誌來跟蹤是否在最後一次回調中發生異常,我是否需要使其變爲volatile?
有沒有保證onCompletion回調在同一個線程中被順序調用?該文檔說「請注意,回調通常會在生產者的I/O線程中執行」。所以我會認爲不。
總體上沒有。例如,默認情況下,並行請求中有多個請求 - 它也取決於您的重試次數(默認值不是重試次數)。
如果我想跟蹤,例如,通過保持一個整數計數器發生的異常的數量,我是否需要使用AtomicInteger?
只有一個線程寫入。所以嚴格沒有。閱讀線程可能會「錯過」更新,但稍後您將閱讀此更新。
或者如果我想保留一個布爾標誌來跟蹤是否在上次回調中發生異常,我是否需要使其變爲volatile?
可能會有幫助。
此外:您可以在回調的主線程中「阻止並等待」。
有關詳細信息,請參閱 http://docs.confluent.io/current/clients/producer.html#synchronous-writes
所以你說什麼是我應該刪除回調,而是做的Future.get()? – rents
如果你想獲得同步處理,是的。它當然會帶來性能上的衝擊。 –
對,這應該是一個評論,沒有答案。我沒有尋找替代方案,只是想檢查是否應該保持變量的原子性/易失性。 – rents