我将为我们的密集消息传递系统设置kafka群集。 目前,我们已经设置了两个kafka集群,一个位于伦敦(LD)作为主要,另一个位于纽约(纽约)作为DR(备份),我们已经使Java客户端将数据从LD复制到NY。
由于Kafka具有内置功能,例如分区,可扩展性复制,高可用性和故障转移目的,因此我们希望创建一个由伦敦和纽约两个服务器组成的更大的集群
但是...
我们遇到纽约和LD服务器之间的连接问题,网络速度非常糟糕。
我已经完成了服务器测试。
生产者配置: - acks = 1(仅需要来自分区负责人的确认) - 发送异步。
当伦敦的制作人向LD中的经纪人发送消息时,吞吐量为100,000 msg / sec,提供的消息大小为:100bytes => 10MB /秒
当伦敦的制片人向纽约的经纪人发送消息时,吞吐量为10 msg / sec,提供的消息大小为:100bytes => 1KB /秒
因此...
我正在考虑以任何方式确保生产者/消费者利用地方性,这意味着如果他们在同一个网络中,则会向最近的经纪人发送消息。 让我们说:LD中的消费者会向LD的经纪人发送消息。 (我知道写/读请求只发生在分区负责人身上)。
任何建议都会非常适合。
答案 0 :(得分:1)
根据我的理解,您目前的结构是:
您希望使代理位于所有分区的LD领导者中,因此所有生产者都将与此代理进行交互,并且位于NY的代理将用作复制。如果是这种情况,那么您可以执行以下操作:
检查主题的配置:
./kafka-reassign-partitions.sh --reassignment-json-file manual_assign.json --execute
并假设:
你可以观察代理1(NY)如何处理分区1的领导者,我们想要修改它,为了重新分配分区是必要的:
{"partitions": [
{"topic": "<topic-name>", "partition": 0, "replicas": [0,1]},
{"topic": "<topic-name>", "partition": 1, "replicas": [0,1]}
],
"version":1
}
JSON文件的内容:
./kafka-preferred-replica-election.sh
最后,要强制kafka更新领导者,请运行:
Application with identifier 'a67a2a59-9bf8-417c-a59e-809fea872b9d' was not found in the directory c7d9eacc-ff4c-499b-8f7f-de7a2daf9af2
如果没有指定主题列表,那么最后一个命令将影响您创建的所有主题,这不应该是一个问题,但要记住它。
值得一看rule of five,它解释了类似的东西。如果您好奇,可以查看工具this guide的官方文档。