[英]creating one kafka consumer for several topics
我想為多個主題創建單個 kafka 消費者。 消費者的方法構造函數允許我為訂閱內的主題列表傳輸 arguments,如下所示:
private Consumer createConsumer() {
Properties props = getConsumerProps();
Consumer<String, byte[]> consumer = new KafkaConsumer<>(props);
ArrayList<String> topicMISL = new ArrayList<>();
for (String s:Connect2Redshift.kafkaTopics) {
topicMISL.add(systemID + "." + s);
}
consumer.subscribe(topicMISL);
return consumer;
}
private boolean consumeMessages( Duration duration, Consumer<String, byte[]> consumer) {
try { Long start = System.currentTimeMillis();
ConsumerRecords<String, byte[]> consumerRecords = consumer.poll(duration);
}
}
之后,我想每 3 秒將來自 kafka 的記錄輪詢到 stream 並處理它們,但我想知道這個消費者內部是什么 - 如何輪詢來自不同主題的記錄 - 首先是一個主題,然后是另一個主題,或者並行。 會不會一直處理一個消息量大的主題,而另一個消息量少的主題會等待?
一般來說,這取決於您的主題設置。 Kafka 通過每個主題使用多個分區進行擴展。
如果您有一個分區接收的消息比其他分區多得多,您可能會遇到此特定分區的消費者滯后的情況。 調整批量大小和消費者設置可能會對他們有所幫助,也可以壓縮消息。 理想情況下,確保平均分配負載可以避免這種情況。
查看這篇博客文章,它讓我對內部有了很好的了解: https://www.confluent.io/blog/configure-kafka-to-minimize-latency/
ConsumerRecords<String, String> records = consumer.poll(long value);
for (TopicPartition partition : records.partitions()) {
List<ConsumerRecord<String, String>> partitionRecords = records.records(partition);
for (ConsumerRecord<String, String> record : partitionRecords) {
}
}
還需要通過使用 consumer.commitSync 查找偏移量和提交來提交偏移量
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.