我们需要从Kafka提取数据并写入AWS s3。 Kafka由独立的部门管理,我们只能访问特定主题。
基于Kafka文档,看起来Kafka Connect对我来说很简单,因为我没有任何自定义消息处理逻辑。
通常,当我们运行Kafka Consumer时,我们可以运行具有相同使用者组的多个JVM以实现可伸缩性。特定消费者的消费者JVM可以在同一物理服务器上运行或不同。当我想使用Kafka Connect时会出现什么情况?
我们说我有20个主题分区。
如何使用20个实例运行Kafka Connect?
我可以在同一个物理实例上运行多个Kafka Connect实例吗?
答案 0 :(得分:0)
我的理解是,如果您只有一台计算机,则应该只启动一个kafka连接实例,并将tasks.max
属性配置为您希望实现的并行度(在您的示例中) 20可能是好的)。这应该允许kafka connect并行读取您的分区,请参阅此here的文档。
理论上,您可以在同一台计算机上启动多个实例。如果您需要每个实例使用来自不同主题的数据,那么这样做是有意义的。但是,如果您希望实例使用来自同一主题的数据,我不认为这样做会对您有所帮助。使用tasks.max
在同一进程中使用单独的线程,即使不是更好的性能,也会为您提供相同的功能。
如果您希望kafka connect在多台计算机上运行并从同一主题读取数据,则可以在here中运行。
答案 1 :(得分:0)
Kafka Connect负责平衡所有员工的负载。在20个节点的示例中,您可以:(例如)
这取决于您的数量和所需的吞吐量。
要在多个节点follow the instructions here之间以分布式模式运行Kafka Connect,并确保为它们提供所有相同的group.id
,这些Stage stage = new Stage();
Parent root = FXMLLoader.load(Main.class.getResource("your.fxml")));
stage.setTitle("...");
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
将它们标识为同一群集的成员(因此有资格共享工作负载跨越他们的任务)。分布式模式here的更多配置详细信息。
即使您在单个节点上运行Kafka Connect,我个人也建议在分布式模式下运行它,因为它使扩展更加简单(您只需添加其他节点,但执行和配置仍然是相同)。
我没有看到在单个节点上运行多个Kafka Connect工作人员的好处。每个Kafka Connect工作人员都可以根据需要运行多个任务和连接器。