我们有10个应用程序服务器和3个kafka群集,以支持应用程序消息传递请求。 最近,我们遇到了一种情况,由于网络问题,kafka群集关闭,整个应用程序由于所有数据丢失而关闭了几个小时。 当我在寻找卡夫卡灾难恢复计划时,发现我们应该有-
由于我们在建立另一个数据中心方面受到一些限制,因此我们正在考虑采用一种方法-
如果在kafka端出现问题,数据将在文件中可用并可以恢复。所以,我的问题是 这种方法好吗?这个架构有什么重大问题吗?还有其他建议吗?
答案 0 :(得分:1)
尽管我没有这种单DC冗余的方案,但是我发现对于某些客户来说这可能很有趣。因此,这是一个假设的解决方案。
我认为,将非Kafka基础架构视为您的备份解决方案是一个坏主意。你的程序员在编码以来的API取决于很多卡夫卡相关的元数据,从主题和分区收到相应的消息就会哭。 应用程序将如何找到它从主题-1处理的最后一条记录:分区:27?在那里,因为生产商将未来的记录去也使用卡夫卡的API。
我将建立一个次级卡夫卡簇,更小的相对于你的孤立经纪人,动物园管理员和磁盘主集群。使用镜像制作者或复制者(https://docs.confluent.io/current/multi-dc-replicator/mirrormaker.html)用实际数据填充此群集。你可以继续保留时间降低到管理磁盘空间等,但它会保留所有的实时应用进展顺利。
在你的主群集出现故障时,应用程序需要使用这个集群的经纪人常做处理。
消费应用需要卡夫卡之外保存偏移能够简单地从一个检查点重新启动。 制作应用程序只需要改变代理ID。此开关可以在代理或独立的microService保持卡夫卡的连接,如果你要到那个水平进行编程。
答案 1 :(得分:0)
您的kafka经纪人是否在单独的机架服务器上运行?
出于维护目的,机架服务器可能会脱机几分钟。 https://kafka.apache.org/documentation/#basic_ops_racks
不建议在不同的数据中心上分发kafka-cluster。当您这样做时,您可能会开始遇到与网络相关的问题。
https://kafka.apache.org/documentation/#datacenters
如果整个数据中心都不可用怎么办?
起诉数据服务提供商,如果他们未交付SLA。写生产者,假设经纪人可能不可用。您还可以查看unclean leader选举。
替代策略可以是:只要您的生产者注意到kafka经纪人没有响应,就可以采取其他策略。将数据放入elasticsearch /其他数据库。这样您就可以依靠一些东西了。
如果您已经正确地设计了kafka环境,那么在少数代理崩溃的情况下,最小数量的同步副本和ack = all应该保证数据存在于机器上。根据设计,如果同步副本数>最小同步副本数,则为0。经纪人不会接受生产者的信息。
此外,如果数据mirrored across different clusters位于不同的数据中心,那也将给您带来更大的信心。
答案 2 :(得分:0)
您是否检查了MirrorMaker 2(Kafka 2.5+随附的功能)? 它启用具有2个或更多集群的单向,双向复制方案。 如果您从另一侧接管,它甚至可以将消费者组偏移量转换为另一个Kafka群集。