同步日志到hadoop的架构

Architecture of syncing logs to hadoop

我在几个云提供商中有不同的环境,例如 windows 服务器,机架空间中的 linux 服务器,aws..等。在那个和内部网络之间有一个防火墙。

我需要构建一个实时服务器环境,所有新生成的 IIS 日志,apache 日志将同步到内部大数据环境。

我知道 Splunk 或 Sumologic 等工具可能会有所帮助,但我们需要在开源技术中实现此逻辑。由于防火墙的存在,我假设我只能拉取日志而不是从云提供商那里推送。

任何人都可以与我分享在 NRT(近实时)中同步大量日志的经验法则或通用架构是什么?我听说过 Apache Flume、Kafka 并想知道是否需要这些,或者这只是使用 rsync 之类的东西的问题。

您可以使用 rsync 获取日志,但您不能像 Spark StreamingApache Storm 那样分析它们。

您可以选择这两个选项之一。

  1. Apache Spark Streaming + Kafka

  1. Apache Storm + Kakfa

看看这个article关于这两个选项的集成方法。

看看这个 presentation,其中涵盖了 in-depth 对 Spark StreamingApache Storm 的分析。

性能取决于您的用例。 Spark Steaming is 40x faster to Storm 处理中。但是如果你添加“reliability”作为关键条件,那么数据应该先移动到HDFS,然后再由Spark Streaming处理。它将降低最终吞吐量。

可靠性限制:Apache Storm

  1. Exactly once 处理需要持久数据源。
  2. 至少一次处理需要可靠的数据源。
  3. 可以包装不可靠的数据源以提供额外的保证。
  4. 有了持久可靠的来源,Storm 将不会丢失数据。
  5. 常见模式:使用 Apache Kafka 返回不可靠的数据源(以 100% 的耐用性换取较小的延迟命中)。

可靠性限制:Spark Streaming

  1. 容错和可靠性保证需要 HDFS-backed 数据源。
  2. 在流处理之前将数据移动到 HDFS 会引入额外的延迟。
  3. 网络数据源(Kafka 等)在工作节点发生故障时容易丢失数据。