缩放Kafka Connect是否与缩放Kafka Consumer相同?

时间:2018-03-08 05:56:19

标签: apache-kafka kafka-consumer-api apache-kafka-connect

我们需要从Kafka提取数据并写入AWS s3。 Kafka由独立的部门管理,我们只能访问特定主题。

基于Kafka文档,看起来Kafka Connect对我来说很简单,因为我没有任何自定义消息处理逻辑。

通常,当我们运行Kafka Consumer时,我们可以运行具有相同使用者组的多个JVM以实现可伸缩性。特定消费者的消费者JVM可以在同一物理服务器上运行或不同。当我想使用Kafka Connect时会出现什么情况?

我们说我有20个主题分区。

如何使用20个实例运行Kafka Connect?

我可以在同一个物理实例上运行多个Kafka Connect实例吗?

2 个答案:

答案 0 :(得分:0)

我的理解是,如果您只有一台计算机,则应该只启动一个kafka连接实例,并将tasks.max属性配置为您希望实现的并行度(在您的示例中) 20可能是好的)。这应该允许kafka connect并行读取您的分区,请参阅此here的文档。

理论上,您可以在同一台计算机上启动多个实例。如果您需要每个实例使用来自不同主题的数据,那么这样做是有意义的。但是,如果您希望实例使用来自同一主题的数据,我不认为这样做会对您有所帮助。使用tasks.max在同一进程中使用单独的线程,即使不是更好的性能,也会为您提供相同的功能。

如果您希望kafka connect在多台计算机上运行并从同一主题读取数据,则可以在here中运行。

答案 1 :(得分:0)

Kafka Connect负责平衡所有员工的负载。在20个节点的示例中,您可以:(例如)

  • 1位Kafka Connect工作人员,处理20个分区
  • 5位Kafka Connect工作人员,每人处理4个分区
  • 20名Kafka Connect工作人员,每人处理1个分区

这取决于您的数量和所需的吞吐量。

要在多个节点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工作人员都可以根据需要运行多个任务和连接器。