从我的边缘节点推送 kafka 消息的最佳方式是什么?

What's the best way to push kafka messages from my edge nodes?

我在主要区域(美国东部)有一名工作人员计算我们边缘位置的流量数据。我想将数据从边缘区域推送到我们的主要 kafka 区域。

例如波兰、澳大利亚、美国西部。我想将所有这些统计数据推送到美国东部。我不想在从边缘区域到主区域的写入过程中产生额外的延迟。

另一种选择是创建另一个 kafka 集群和 worker 作为中继。这将需要我们在每个区域维护单独的集群,并且会给我们的部署增加更多的复杂性。

我看过 Mirror Maker,但我真的不想镜像任何东西,我想我正在寻找中继系统。如果这不是执行此操作的设计方法,我如何将所有应用程序指标聚合到要计算和排序的主要区域?

感谢您的宝贵时间。

将消息写入磁盘上的本地日志文件。编写一个读取日志文件并将事件推送到主 kafka 守护进程的小守护进程。

要增加吞吐量并限制延迟的影响,您还可以每分钟轮换一次日志文件。然后将日志文件与 cronjob 同步到您的主要 kafka 区域。让导入守护进程 运行 在那里。

据我所知,以下是您的选择:

  1. 在每个区域设置一个本地 Kafka 集群并让您的边缘节点 写入他们本地的 Kafka 集群以实现低延迟写入。从 在那里,您将设置一个镜像制造商,将数据从本地 Kafka 拉到远程 Kafka 进行聚合。
  2. 如果您担心使用高延迟阻塞请求中断您的应用程序请求路径,那么您可能希望将您的生产者配置为异步(非阻塞)写入您的远程 Kafka 集群。根据您选择的编程语言,这可能是简单的或复杂的练习。
  3. 运行 每个主机中继(或数据缓冲区)服务,可以像推送到远程 Kafka 集群的日志文件和守护进程一样简单(如上所述)。或者,运行 单个实例 Kafka / Zookeeper 容器(有 docker 图像将两者捆绑在一起)缓冲下游拉取数据。

选项 1. 绝对是解决此问题的最标准解决方案,尽管有点笨拙。我怀疑将来会有更多的工具出现在 Confluent / Kafka 中以支持选项 3。