Mirroring
正在Kafka群集之间复制数据,而Replication
用于复制Kafka群集中的节点。
如果已设置Replication
,是否有Mirroring
的具体用途?
答案 0 :(得分:4)
它们用于不同的用例。让我们试着澄清一下。
如documentation中所述,
在Kafka中添加复制的目的是提高耐用性和可用性。我们希望保证即使存在服务器故障,任何成功发布的消息也不会丢失并且可以被消费。这种故障可能是由机器错误,程序错误或更常见的软件升级引起的。我们有以下高级目标:
在群集内部可能存在网络分区(单个服务器发生故障等等),因此我们希望在节点之间提供复制。给定三个节点和一个集群的设置,如果server1发生故障,Kafka可以选择两个副本。相同的群集意味着相同的响应时间(好吧,这也取决于这些服务器的配置方式,当然,但在正常情况下,它们不应该有太大差异)。
另一方面,镜像似乎非常有价值,例如,当您迁移数据中心时,或者您拥有多个数据中心时(例如,美国的AWS和爱尔兰的AWS)。当然,这些仅仅是几个用例。因此,您在此处所做的是为属于同一数据中心的应用程序提供更快,更好的访问数据的方式 - 在某些情况下,数据位置就是一切。如果每个群集中都有一个节点,如果发生故障,您可能会有更长的响应时间,例如,从位于爱尔兰的AWS到美国的AWS。
您可能声称,为了实现数据位置(群集1中的服务从群集1中的kafka读取),仍然需要将数据从一个群集复制到另一个群集。这绝对是正确的,但是镜像的优势可能高于通过位于另一个数据中心的Kafka直接(通过SSH隧道?)读取的优势,例如单个连接,客户端连接/会话时间更长(取决于数据中心的位置),立法(一些数据可以在一个国家收集,而一些其他数据不应该)。
复制是提高可用性的基础。在数据局部性不重要的环境中,您不应该使用镜像来处理高可用性。同时,您不应仅使用复制,而只需要跨数据中心复制数据(我甚至不知道您是否可以在没有镜像/ ssh隧道的情况下)。