簡體   English   中英

Kafka 消費者的主題和分區發現

[英]Topic and partition discovery for Kafka consumer

我對 Flink 和 Kafka 相當陌生,並且在 Scala 中編寫了一些數據聚合作業,這些作業在 Apache Flink 中運行,這些作業使用來自 Kafka 的數據執行聚合並將結果返回給 Kafka。

我需要這些作業來使用在作業運行時創建的與模式匹配的任何新 Kafka 主題的數據。 我通過為我的消費者設置以下屬性來完成這項工作

val properties = new Properties()
properties.setProperty(“bootstrap.servers”, “my-kafka-server”)
properties.setProperty(“group.id”, “my-group-id”)
properties.setProperty(“zookeeper.connect”, “my-zookeeper-server”)
properties.setProperty(“security.protocol”, “PLAINTEXT”)
properties.setProperty(“flink.partition-discovery.interval-millis”, “500”);
properties.setProperty(“enable.auto.commit”, “true”);
properties.setProperty(“auto.offset.reset”, “earliest”);

val consumer = new FlinkKafkaConsumer011[String](Pattern.compile(“my-topic-start-.*”), new SimpleStringSchema(), properties)

消費者工作正常並使用以“my-topic-start-”開頭的現有主題的數據

當我第一次發布針對新主題的數據時,例如“my-topic-start-test1”,我的消費者直到主題創建后 500 毫秒后才識別該主題,這是基於屬性的。 當消費者識別出主題時,它不會讀取發布的第一條數據記錄,而是開始有效地讀取后續記錄,每次針對新主題發布數據時,我都會丟失第一條數據記錄。

是否有我遺漏的設置或者卡夫卡的工作方式? 任何幫助,將不勝感激。

謝謝Shravan

我認為部分問題是我的生產者在一個 go 中創建主題並發布消息,所以當消費者發現新分區時,該消息已經生成。

作為一個臨時解決方案,我更新了我的生產者以創建該主題(如果它不存在),然后發布一條消息(使其成為 2 步過程)並且這有效。

不過,如果有一個更強大的消費者端解決方案會很好:)

暫無
暫無

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

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