了解Kafka poll(),flush()和commit()

时间:2019-07-14 12:37:32

标签: apache-kafka kafka-consumer-api kafka-producer-api flume

我是Kafka的新手,正在为我的新应用尝试一些小用例。用例基本上是 卡夫卡制片人—>卡夫卡消费品—>槽-卡夫卡水源—>水槽-hdfs-水槽。

在消耗(步骤2)时,以下是步骤顺序。 1. Consumer.Poll(1.0)    1.a.产生多个主题(正在监听多个水槽代理)    1.b.生产。轮询() 2.每25毫秒一次Flush() 3.每隔msgs提交一次(asynchCommit = false)

问题1:这个动作顺序对吗!?!

问题2:这将导致任何数据丢失,因为刷新是每25 msgs,而提交是针对每个msg吗?!?

问题3:生产者的poll()与消费者的poll()之间有何区别?

问题4:提交消息但未刷新消息时会发生什么!?!

如果有人可以帮助我理解生产者/消费者之间用于民意调查,刷新和提交的抵消示例,我将不胜感激。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

在第2步中,只需执行2个操作即可:

    Kafka-producer —> Kafka-Consumer—> flume-Kafka source—>flume-hdfs-sink.

    When Consuming(step2), below is the sequence of steps. 1. consumer.Poll(1.0) 1.a. Produce to multiple topics (multiple flume agents are listening).

其余步骤不是必需的。

例如:您有一个主题kakfa-source-original,必须从那里消费和生产到kafka-source-flumeKafka-consumer可以从kakfa-source-original进行读取,根据需要转换任何消息,并将此新记录发布到kafka-source-flume。渠道代理将从这个新主题kafka-source-flume中挑选主题。

您还可以用Flume的Kafka Source替换Kafka-Consumer,因为如果没有转换,这将降低管道的复杂性。

从文档中:

  

Kafka Source是一个Apache Kafka使用者,可从以下程序读取消息   卡夫卡主题。如果您有多个运行的Kafka来源,则可以   为他们配置相同的消费者组,以便每个人都能读取一个唯一的   主题的分区集。

恕我直言,您唯一应管理的提交是负责消息转换的Kafka-consumer。 Flume和Kafka可以处理管道中的任何故障。

如果commit-async失败,则下游可以发送一些重复的消息。请参阅:Getting duplicates in kafka consumer