2017-10-06 107 views
1

我正在調查kafka溪流。我想過濾我的流,使用選擇性非常低的過濾器(幾千個之一)。我正在看這種方法: https://kafka.apache.org/0100/javadoc/org/apache/kafka/streams/kstream/KStream.html#filter(org.apache.kafka.streams.kstream.Predicate)卡夫卡流過濾:經紀人還是消費者方?

但我找不到任何證據,如果過濾器將由消費者評估(我真的不想將大量的GB轉移到消費者,只是把它們扔掉),或者在經紀人內部(耶!)。

如果在消費者方面進行評估,是否有任何方法,如何在經紀人這樣做?

謝謝!

回答

2

卡夫卡不支持代理端過濾。如果您使用Streams API,則將在您的應用程序中進行過濾(謂詞不會由KafkaConsumer進行評估,而是在拓撲的「處理器節點」內 - 即在Streams API運行時代碼中)。

這可能有助於:https://docs.confluent.io/current/streams/architecture.html

其原因不支持代理側濾波,該經紀人只使用(1)字節數組作爲鍵和值的數據類型和使用(2)零複製機制,以實現高吞吐量。經紀人側過濾將需要,反序列化在經紀人端的數據什麼是主要的性能影響(反序列化成本和零拷貝優化)。

+0

好吧......即使只用過濾鍵,我也可以。對於我來說,如果kafka只是可以使用「前綴」數組過濾(我的密鑰是字符串,並且我可以選擇要匹配的前綴),那麼傳輸很多GB數據就會小得多... – malejpavouk

+1

您可以隨時創建一個功能請求Jira:https://issues.apache.org/jira/projects/KAFKA –

+0

好點。我創建了一個改進請求:https://issues.apache.org/jira/browse/KAFKA-6020,讓我們看看他們是否會喜歡這個想法:-) – malejpavouk