Kafka生产者故障转移

时间:2018-12-03 13:55:56

标签: apache-kafka hdfs high-availability inotify

我正在编写一个Kafka Producer,它利用HDFS INotify API监视特定目录,并在文件添加到该目录时将消息发送到该主题。

展望HA,我正在考虑使用supervisor(或类似的)来确保始终有生产者实例在运行。但是,我无法确保在重新启动生产者时不会丢失FS更改。我知道HDFS允许我在获取事件流时手动设置lastReadTXid。当生产者重新启动时,我希望能够从此偏移量开始。

我相信我将在该主题上发送的消息将新文件的路径作为键,将TXid作为值。

我有一些想法:

想法1-写我自己的主管。我的程序将启动另一个线程/进程,即生产者。父进程维护TXid,如果第一个生产者线程/进程失败,它将处理启动另一个生产者线程/进程。但是,我遇到了同样的问题。如果父进程失败,则最后一个TXid将丢失,并且可能会丢失交易。

想法2-生产者可以某种方式检查关于该主题的最后发送的消息。我可以看到最后发送的值(最后一个TXid),并从该点开始事件流。

想法3-有2个制作人,两个制作人都针对同一主题。一个人是领导者,一个人是副本。如果一个失败,则在重新启动第一个消息时,还有另一个继续产生消息。我看到的问题是现在有重复的消息发送到该主题。

有人可以指出我正确的方向吗?

0 个答案:

没有答案