能否配置Kafka接收含GCS上传文件名的消息?无Pub/Sub的PDF处理方案咨询
问题1:是否可以配置Kafka,使其接收的消息中包含上传至Google Storage(GCS)的文件名?
完全可以,有两种常用实现方式:
通过Kafka Connect GCS Source Connector配置:
使用该连接器读取GCS文件时,可设置include.file.name参数为true,将文件名添加到消息headers中;也可通过filename.field指定字段名,把文件名嵌入到消息payload里(比如在JSON格式消息中新增gcs_filename字段)。通过GCS事件触发自定义逻辑发送消息:
用Google Cloud Functions监听GCS的OBJECT_FINALIZE事件(文件上传完成事件),在函数中提取上传文件的名称、存储桶路径等元数据,再通过Kafka客户端(如Java KafkaProducer、Python kafka-python库)将包含文件名的消息发送到指定Kafka主题。
问题2:PDF文件上传后需通过Cloud Run处理,不使用Pub/Sub与Kafka通信的可行方案
在不依赖Pub/Sub的前提下,可通过以下方案实现:
Cloud Run部署Kafka消费者服务:
在Cloud Run镜像中集成Kafka客户端,将服务配置为持续监听目标Kafka主题。当收到包含GCS PDF文件路径/文件名的消息时,服务直接从GCS下载对应PDF,执行预设脚本处理,处理完成后可将结果回写到Kafka或GCS。注意为服务配置足够的资源和超时时间,适配PDF处理的耗时。使用Kafka Connect HTTP Sink Connector触发Cloud Run:
配置Kafka Connect的HTTP Sink Connector,将Kafka中包含PDF文件信息的消息(以String或JSON格式存储文件路径)以HTTP请求发送到Cloud Run的公开端点。Cloud Run收到请求后,解析文件信息并从GCS拉取PDF执行处理脚本,需确保Connector请求格式与Cloud Run端点接收格式匹配。Kafka Streams应用调用Cloud Run API:
编写Kafka Streams应用消费Kafka主题中的文件元数据消息,在处理逻辑中调用Cloud Run的REST API(通过gcloud run services invoke命令或直接HTTP请求)触发实例处理PDF。这种方式适合需要对消息做额外过滤、转换后再触发处理的场景。
内容的提问来源于stack exchange,提问作者Mike9

