如何设置 Apache Kafka 消费者以通过 Internet 获取数据?
How to setup Apache Kafka consumer to get data across internet?
我已经在网络上的两台不同服务器上配置了 2 个具有基本设置的 Kafka,一台在英国,另一台在印度,我的场景非常简单,英国是发布者,印度是消费者,但是 none其中可以获取任何数据。
我检查过我的防火墙没有端口阻塞/任何。我还用 redis pubsub 测试了我的场景并且它有效但我在 Kafka 上没有成功。
我应该如何设置我的 Kafka 来执行此操作?还是完全可以用 Kafka 做到这一点?
当你想从多个数据中心进行交互时,不推荐使用 Kafka。 Kafka 旨在为您提供高吞吐量,因为您正在从网络延迟最小的同一数据中心进行生产和消费。
为什么?
一旦您在不同的数据中心拥有消费者,延迟就会开始发挥作用,影响 Kafka 与消费者(群组 rebalancing/offset commits/heartbeats)和生产者在不同数据中心所做的所有协调为每条消息发送获取 acks 将是相当大的,这会减慢您生成消息的速度。
因此,理论上,如果您的网络可靠,您可以很好地进行设置。
现在,如果您正在考虑让 Kafka 代理分布在数据中心之间,成本会更高。所有代理间的通信都将被延迟,有效地导致副本滞后、大量网络调用(通过互联网)、代理心跳超时等,这在理论上也是可行的。
在这些场景的实践中,最好为每个 DC 配备本地 Kafka 集群,其中 produce/consume 使用本地托管的应用程序发送消息,并 Mirrormaker 在数据中心之间聚合消息。
找到解决方案:
在 Apache Kafka 的配置中,添加以下行:
advertised.listeners=PLAINTEXT://xxx.xxx.xxx.xxx:pppp
# x = your IP
# p = your port
我已经在网络上的两台不同服务器上配置了 2 个具有基本设置的 Kafka,一台在英国,另一台在印度,我的场景非常简单,英国是发布者,印度是消费者,但是 none其中可以获取任何数据。
我检查过我的防火墙没有端口阻塞/任何。我还用 redis pubsub 测试了我的场景并且它有效但我在 Kafka 上没有成功。
我应该如何设置我的 Kafka 来执行此操作?还是完全可以用 Kafka 做到这一点?
当你想从多个数据中心进行交互时,不推荐使用 Kafka。 Kafka 旨在为您提供高吞吐量,因为您正在从网络延迟最小的同一数据中心进行生产和消费。
为什么?
一旦您在不同的数据中心拥有消费者,延迟就会开始发挥作用,影响 Kafka 与消费者(群组 rebalancing/offset commits/heartbeats)和生产者在不同数据中心所做的所有协调为每条消息发送获取 acks 将是相当大的,这会减慢您生成消息的速度。
因此,理论上,如果您的网络可靠,您可以很好地进行设置。
现在,如果您正在考虑让 Kafka 代理分布在数据中心之间,成本会更高。所有代理间的通信都将被延迟,有效地导致副本滞后、大量网络调用(通过互联网)、代理心跳超时等,这在理论上也是可行的。
在这些场景的实践中,最好为每个 DC 配备本地 Kafka 集群,其中 produce/consume 使用本地托管的应用程序发送消息,并 Mirrormaker 在数据中心之间聚合消息。
找到解决方案:
在 Apache Kafka 的配置中,添加以下行:
advertised.listeners=PLAINTEXT://xxx.xxx.xxx.xxx:pppp
# x = your IP
# p = your port