Apache kafka Apache Kafka灾难恢复计划

Apache kafka Apache Kafka灾难恢复计划,apache-kafka,Apache Kafka,我们有10个应用服务器和3个kafka群集来支持应用程序消息传递请求。 最近,我们遇到了一个情况,由于网络问题,kafka集群宕机,整个应用程序宕机数小时,因为所有数据都丢失了。 当我在寻找卡夫卡灾难恢复计划时,发现我们应该- 转移到同一数据中心中的另一个群集 转移到附近数据中心的另一个群集 转移到另一个区域数据中心中的另一个群集 由于我们在拥有另一个数据中心方面存在一些限制,因此我们正在考虑一种方法- 所有应用服务器都在文件中写入数据 Filebeat读取文件并推送到kafka 如果卡夫卡终端

我们有10个应用服务器和3个kafka群集来支持应用程序消息传递请求。 最近,我们遇到了一个情况,由于网络问题,kafka集群宕机,整个应用程序宕机数小时,因为所有数据都丢失了。 当我在寻找卡夫卡灾难恢复计划时,发现我们应该-

  • 转移到同一数据中心中的另一个群集
  • 转移到附近数据中心的另一个群集
  • 转移到另一个区域数据中心中的另一个群集
  • 由于我们在拥有另一个数据中心方面存在一些限制,因此我们正在考虑一种方法-

  • 所有应用服务器都在文件中写入数据
  • Filebeat读取文件并推送到kafka
  • 如果卡夫卡终端出现问题,数据将以文件形式提供,并且可以恢复。所以我的问题是,, 这个方法好吗?此体系结构中有任何重大问题吗?还有其他建议吗

    您的kafka代理是否在单独的机架服务器上运行

    出于维护目的,机架式服务器可能会脱机几分钟

    不建议在不同的数据中心上分发kafka群集。这样做时,您可能会开始遇到与网络相关的问题

    如果整个数据中心不可用怎么办

    如果数据服务提供商未提供SLA,则起诉他们。假设代理可能不可用,则编写生成程序。你也可以调查选举

    另一种策略可以是:一旦制作人注意到卡夫卡经纪人没有回应。将数据放入elasticsearch/其他数据库。这样你就有了可以依靠的东西

    如果您已经正确地设计了kafka环境,那么最小数量的同步副本和ack=all应该可以保证在很少有代理宕机的情况下,计算机上存在数据。根据设计,如果同步副本数量>最小同步副本数量;代理将不接受来自生产者的消息


    另外,如果数据位于不同的数据中心,这也会给您带来更多的信心。

    虽然我还没有出现过单DC冗余的情况,但我可以看出这对一些客户来说可能很有趣。所以这是一个假设的解决方案

    我认为,将非卡夫卡基础设施作为备份解决方案是一个坏主意。您的程序员在编码时会哭,因为API依赖于大量与Kafka相关的元数据来接收来自主题和分区的适当消息。 应用程序将如何从主题1:分区:27中找到它处理的最后一条记录?由于制作人也使用卡夫卡API,未来的记录将走向何方

    我将构建一个辅助Kafka集群,它比您的主集群更小,具有独立的代理、zookeeper和磁盘。使用mirror maker或replicator()将实际数据填充到此群集。您可以保持较低的保留时间来管理磁盘空间等,但这将使所有实时应用程序顺利运行

    一旦主集群崩溃,应用程序需要使用该集群的代理进行常规处理

    消费者应用程序需要在卡夫卡之外保存偏移量,以便能够从最后一个检查点简单地重新启动。
    Producer apps只需更改代理id。如果您想达到该级别,可以在代理或独立的微服务中编程此开关,以维护Kafka连接。

    您是否检查了MirrorMaker 2(Kafka 2.5+附带的功能)? 它支持具有2个或更多群集的单向、双向复制方案。
    如果您从另一方接管,它甚至会将消费群偏移量转换为另一个Kafka群集。

    这里有相当好的详细信息,这就是我的观点,我们不能有多个数据中心,因此,我谈论的这个计划是针对单个数据中心的灾难恢复计划,您无法保护单个数据中心免于故障。对于“将数据写入文件”,您是否正在回复该文件?如果服务器中的硬盘在写入时出现故障怎么办?这是所有软件系统的硬道理。。。您需要多个冗余。我认为写入文件是可以的。现在,如果filebeat是一个可靠的卡夫卡制作人,那么就使用它。如果不是,则将您自己的解决方案写入流文件。如果计划复制整个群集进行故障转移,则该群集的大小应相同,而不是更小。