我是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:提交消息但未刷新消息时会发生什么!?!
如果有人可以帮助我理解生产者/消费者之间用于民意调查,刷新和提交的抵消示例,我将不胜感激。
提前谢谢!
答案 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-flume
。 Kafka-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