Snowplow流富集是否必须用DynamoDB?运行JAR遇相关报错求解答
Snowplow流富集是否必须使用DynamoDB?
没错,Snowplow针对Kinesis流的流富集流程确实必须依赖DynamoDB,这是由它的核心工作机制决定的。
你碰到的ERROR com.amazonaws.services.kinesis.leases.impl.LeaseManager - Failed to get table status for SnowplowEnrich-${enrich.streams.in.raw}错误,本质就是富集服务找不到对应的DynamoDB租赁表——要么是表压根没创建,要么是配置里的占位符${enrich.streams.in.raw}没替换成实际的Kinesis流名称,也有可能是运行JAR的IAM角色没有访问DynamoDB的权限。
这里再给你拆解下为什么必须用DynamoDB:
- 它的租赁管理(Lease Manager)组件需要DynamoDB来存储Kinesis分片的租赁信息,追踪哪些分片被哪个富集实例在处理,这样多实例部署时能避免重复处理同一条数据,还能在实例故障时实现无缝的分片接管,保证数据处理的Exactly-Once语义。
- 你需要先创建符合Snowplow要求的DynamoDB表(可以用官方提供的Terraform模块快速生成,也能手动创建,核心字段包括
leaseKey、owner、counter等)。 - 同时要确保运行富集JAR的角色拥有足够的DynamoDB权限,比如
dynamodb:GetItem、dynamodb:PutItem、dynamodb:UpdateItem、dynamodb:Scan,如果让服务自动创建表的话还需要dynamodb:CreateTable权限。
内容的提问来源于stack exchange,提问作者Prakhar Mishra
相关产品推荐
相关产品推荐

