1

Mirroring正在Kafka集群之间复制数据,而Replication用于复制Kafka集群中的节点。Apache Kafka:镜像与复制

Replication是否有任何具体的用途,如果Mirroring已经设置?

回答

3

它们用于不同的用例。我们试着澄清一下。

documentation描述,

在卡夫卡添加复制的目的是更有力的耐用性和更高的可用性。我们希望保证任何成功发布的消息都不会丢失,甚至在服务器出现故障时也可以使用。这种故障可能由机器错误,程序错误或更常见的软件升级引起。我们有以下高层目标:

在集群内可能有网络分区(单个服务器出现故障等等),因此我们希望在节点之间提供复制。给定三个节点和一个群集的设置,如果server1失败,则Kafka可以选择两个副本。同一集群意味着相同的响应时间(好吧,它也取决于如何配置这些服务器,当然,但在正常情况下,它们应该没有太大差别)。另一方面,例如,当您要迁移数据中心或有多个数据中心(例如,美国的AWS和爱尔兰的AWS)时,镜像似乎非常有价值。当然,这只是几个用例。因此,您在此所做的工作是让属于同一数据中心的应用程序以更快,更好的方式访问数据 - 在某些情况下数据的局部性就是一切。

如果每个集群中有一个节点,如果发生故障,可能会有更高的响应时间,比如说,从位于爱尔兰的AWS到美国的AWS。

您可能会声称为了实现数据局部性(从群集中的kafka中读取群集中的服务),仍然需要将数据从一个群集复制到另一个群集。这是毫无疑问的,但是通过镜像可以获得的优势可能比通过位于另一个数据中心的Kafka直接读取(通过SSH隧道?)所获得的优势更高,例如,单个连接关闭,客户端连接/会话时间更长(取决于数据中心的位置),立法(一些数据可以在一个国家收集,而另一些数据则不应该)。

复制是提高可用性的基础。您不应该在数据位置很重要的上下文中使用镜像来处理高可用性。与此同时,您不应该只在需要跨数据中心复制数据的情况下使用复制(我甚至不知道您是否可以在没有镜像/ ssh隧道的情况下)。