卡夫卡 HA + 水槽如何在 Flume 中使用 Kafka HA 配置? 环境问题

问题描述

环境

  • Apache Kafka 2.7.0
  • Apache Flume 1.9.0

问题

目前,在我们的架构中,
我们正在使用 Flume 和 Kafka 通道,没有源和接收器到 HDFS。

未来,我们将使用kafka mirror maker搭建Kafka HA集群。
因此,即使一个集群关闭,我也会尝试使用它,这样连接到另一个集群就不会出现故障问题。

为此,我认为我们需要使用 Flume 使用正则表达式模式订阅主题

假设集群A和集群B存在,并且两个集群有一个主题叫ex。
镜像制作者互相复制ex,所以集群A有主题:ex,b.ex和集群B有主题: ex,a.ex.

例如,在从集群 A 读取 e 和 b.e 时,如果出现故障,它会尝试通过转到相反的集群来读取 ex 和 a.ex。

如下所示。

test.channel = c1 c2
c1.channels.kafka.topics.regex = .*e (impossible in kafka channel)
...

c1.source.kafka.topics.regex = .*e (possible in kafka source)

在flume kafka源的情况下,有一个属性可以将主题作为正则表达式模式读取。
但是频道中不存在这属性

有什么好办法吗?
如果您能提出更好的方法,我将不胜感激。谢谢。

解决方法

当然,最好使用正则表达式或两个主题的列表,但最终会根据主题名称将数据拆分到不同的目录中,让 HDFS 客户端将数据重新合并在一起

一个频道包含一个生产者,因此为什么不能使用正则表达式

前往对面的集群

除非您修改其引导服务器配置并重新启动它,否则 Flume 无法自动执行此操作。这同样适用于任何 Kafka 客户端,真的……这并不是我所说的“高度可用”,因为所有指向故障集群的客户端都会遇到停机时间

相反,您应该使用来自每个集群的 Flume 管道(或 Kafka Connect)。话虽如此,MirrorMaker 只会制作您的数据的额外副本或允许客户端出于自己的目的使用来自其他集群的数据,而不是充当备份/后备

旁白:问题不清楚,但请确保您使用的是 MirrorMaker2,这意味着您已经在使用 Kafka Connect,因此可以安装 HDFS 接收器而不需要 Flume