我将为我们的密集消息系统设置一个kafka集群 . 目前,我们已经设置了两个kafka集群,一个位于伦敦(LD)作为主要,另一个位于纽约(纽约州)作为DR(备份),我们已经使Java客户端将数据从LD复制到NY .
由于Kafka具有内置功能,例如分区,复制以实现可扩展性,高可用性和故障转移目的,因此我们希望在伦敦和纽约创建一个包含两个服务器的更大集群
但...
我们遇到NY和LD服务器之间的连接问题,网络速度非常糟糕 .
我已经进行了服务器测试 .
生产环境 者配置: - acks = 1(仅需要来自分区负责人的确认) - 发送异步 .
-
当伦敦的制作人向LD中的经纪人发送消息时,吞吐量为100,000 msg / sec,提供的消息大小为:100bytes => 10MB / sec
-
当伦敦的制作人和向纽约的经纪人发送消息时,吞吐量为10 msg / sec,提供的消息大小为:100bytes => 1KB / sec
所以...
我正在考虑任何方式来确保 生产环境 者/消费者利用地方性,这意味着如果他们在同一个网络中将向最近的经纪人发送消息 . 让我们说:LD中的消费者会向LD的经纪人发送消息 . (我知道写/读请求只发生在分区负责人身上) .
任何建议都会非常适合 .
1 回答
根据我的理解,您目前的结构是:
1经纪人位于纽约州 .
1位于LD的经纪人 .
n个主题 . (我将假设主题的数量是1) .
n主题上的多个分区 . (我假设分区数是2) .
两个分区都在代理上复制 .
您希望使代理位于所有分区的LD领导者中,因此所有 生产环境 者将与此代理进行交互,并且位于NY的代理将用作复制 . 如果是这种情况,那么您可以执行以下操作:
检查主题的配置:
并假设:
LD经纪人ID:0
NY Broker ID:1
您可以观察代理1(NY)如何处理分区1的领导者,我们想要修改它,为此需要重新分配分区:
JSON文件的内容:
最后,要强制kafka更新领导者,请运行:
如果没有指定主题列表,那么最后一个命令将影响您创建的所有主题,这不应该是一个问题但要记住它 .
值得一看this guide,它解释了类似的东西 . 如果您好奇,可以查看工具here的官方文档 .