我有500个卡夫卡主题。其中一些是结核病水平;有些是每小时MB。
我想将它们缓冲五分钟,并将它们作为Parquet文件写入S3上的特定位置。根据主题名称、时间和随机id,位置每5分钟更改一次,每当位置更改时,我都会向状态主题发送一条消息。我们可以想象,事务写入操作每5分钟发生一次。
我正在努力为我的Spark或Flink问题找到最佳解决方案。
对于Spark,我可以使用结构化流来消费Kafka,并编写每个主题的逻辑。如果我每个主题都有应用程序,我将浪费大量资源用于应用程序主机(驱动程序(,如果我有一个应用程序并在那里消耗所有主题,那么有些主题是稀疏的,并且应用程序将高度耦合。
除了Spark或Flink之外,我也愿意接受其他建议。我的最佳选择是什么?
我已经通过Kafka-S3接收器实现了类似的问题,我使用自定义的每小时S3接收器转储文件。Kafka S3将每500行的文件刷新到S3,S3是一个纯JSON,还将文件名推送到另一个主题"S3文件名"。有一个spark streamer作业使用这些文件名,同一分区下的组名执行JSON到拼花地板的转换并保存回S3。我的工作目前每分钟刷新一次S3位置,因为我已经相应地配置了S3刷新文件大小,即500行。