Amazon s3 使用Kafka Connect从Kafka写入S3有什么好处?

Amazon s3 使用Kafka Connect从Kafka写入S3有什么好处?,amazon-s3,apache-kafka,apache-kafka-connect,Amazon S3,Apache Kafka,Apache Kafka Connect,我只是好奇,使用Kafka Consumer API编写自己的代码从Kafka读取,并使用AWS SDK编写S3,这是不是很简单?有很多不明显的并发症需要处理吗 我这么问是因为Kafka Connect似乎是从Kafka写入S3的最受建议的方式。有两个优点: Connect可以以分布式方式部署,因此可以扩展 Connect是容错的 您只需配置连接器并使用它(无需编码) 如果您进行了更新,则不需要更新任何代码(您没有编写任何代码) 当然,您可以编写自己的消费者应用程序来编写S3,但为什么要重新

我只是好奇,使用Kafka Consumer API编写自己的代码从Kafka读取,并使用AWS SDK编写S3,这是不是很简单?有很多不明显的并发症需要处理吗


我这么问是因为Kafka Connect似乎是从Kafka写入S3的最受建议的方式。

有两个优点:

  • Connect可以以分布式方式部署,因此可以扩展
  • Connect是容错的
  • 您只需配置连接器并使用它(无需编码)
  • 如果您进行了更新,则不需要更新任何代码(您没有编写任何代码)

当然,您可以编写自己的消费者应用程序来编写S3,但为什么要重新发明轮子呢?

您可能已经将前面提到的作为类比,所以我也将在这里使用它:您可能会认为Connect是Kafka生产者和消费者的高级框架,旨在使用源和汇将您的数据与Kafka集成(生产者和消费者分别在连接中的高级等价物)。各种这样的源和汇,简称连接器,已经存在

具体地说,关于从Kafka到Amazon S3的数据导出,已经有一些连接器可用,并且由于我部分负责,请允许我提及使用它的一些优点。(希望这将回答您关于从头开始实现所有这些功能是否更简单的问题)

与直接基于消费者编写程序相比,我将把我的论点大致分为两类:

Connect框架提供的Pros
  • 集群上的透明和可伸缩执行
  • 容错执行,与Kafka使用者组相同(优点是无需编写代码即可实现容错)
  • 用于启动和停止连接器的REST接口
  • 一小部分指标(很快将扩展为一整套性能和运营指标)
  • 总的来说,定义简单直观的流式数据流,包括源、数据()和接收器上的简单转换
S3连接器提供的优点
  • 多个格式化程序(当前正在导出二进制.avro文件和text.json文件)
  • 支持结构化或非结构化数据,前者采用模式演化模式
  • 一系列分区器:基于大小、时间或字段,您可以使用它们作为基类来构建适合自己的自定义分区器 您的用例,如果他们没有完全按照您的要求进行开箱即用
  • 上面的分区器的大多数用例的语义都是一次性的(这意味着,如果您重新处理数据,或者从 如果失败,您将不会在S3中看到重复记录)
  • 易于配置
  • 来自社区的积极支持(如果您开放源代码,您的类也可能最终获得社区的支持)

总的来说,您不必从头开始编写和维护许多其他人(如您)想要使用的代码。此外,如果您发现缺少一个或多个功能,您可以在开源S3连接器中提供这些功能。

如果必须“篡改”卡夫卡信息在写入s3之前,是否可以使用Connect执行此操作?据我所知,Kafka Connect只提供要执行的二进制文件。您可以检查Connect single message transforms。有关更多信息,请查看下面的链接。Link1-,Link2-还可以查看AK文档中关于single message Transformation的内容:@MatthiasJ.Sax如果我想做更多事情,请考虑到我要保存到s3的数据,使用这些转换属性很难/不可能做到这一点,你会建议我扩展/修改S3Connector源代码吗?可能特别是
S3SinkTask:put
代码。我要求确保没有不明显的缺陷,并且是否可以直接进入S3Connector修改路线。我不熟悉连接器的内部结构…因此我无法给出任何进一步的建议。您可能想在Kafka邮件列表上寻求建议:我对您的有用反馈有两个问题。1)对于Kafka Connect,您提到“优点是无需编写代码即可获得容错性”。我认为,通过使用与Kafka Consumer相同的组,Kafka可以自动处理容错。您能否详细说明Kafka Connect如何比消费者API提供更多的容错能力?换句话说,当仅使用Kafka Consumer API时,需要什么才能获得与Kafka Connect相同的容错级别?2)我必须在保存S3消息之前添加自定义逻辑。正如其他人提到的,Kafka Connect公开transformations.properties以在顶部添加额外的逻辑。但如果这不符合我的需要呢。您是否建议只更新
S3Connector
源代码-可能是
S3SinkTask:put
方法以满足我的需要?1)这就是我写作时的目的:无需编写代码。Connect为您提供了与Kafka consumer相同的容错功能(希望强调Connect中没有此功能),但您不必编写使用consumer的代码。事实上,消费者群体也有容错能力。2)是的,我最初的建议是尝试使用Connect和S3连接器。该连接器将随着时间的推移而发展,变得更加健壮、功能齐全和高效。我认为错过这些改进(即使你现在编写一个消费者应用程序来实现连接器已经实现的功能)并试图保持最新状态是很遗憾的。将您自己的自定义模块添加到S3连接器可能更易于维护。但您可能也希望提供这样的补充。还有,是的,一般的想法是编写SMT并使用Connect来实现您所描述的内容。嗨@Glide,我想知道