cla*_*lay 1 amazon-s3 idempotent apache-kafka
所以我的雇主让 Avro 消息通过 Kafka。我们希望将所有消息存档到 Amazon S3。理想情况下,它们将在白天存储在类似 S3 的目录中,并使用类似于以下内容的路径结构:
s3://my-bucket/data/day=2016-03-04/data.avro
是否有关于如何做好这件事的参考或最佳实践?
我的一个问题是幂等性:我如何提供写入幂等性,在这种情况下,记录可能会多次发送到我的接收器写入器,但只能存储在 S3 上一次。
我是否正确,我需要幂等性?如果我实现一个简单的附加(非幂等),Kafka Connect 可能会发送相同的记录两次,并且它们可能会被冗余存储?
AFAIK,您不能附加到 S3 对象(文件):https : //news.ycombinator.com/item?id=10746969 - 除非最近发生了一些变化......
您也不希望将每个事件单独写入 S3,而是批量写入 - 出于明显的性能原因。
所以,我们这样做的方式 - 是使用 Cassandra 作为中间存储来收集一段时间内的事件(时间片) - 将它们按事件时间而不是处理时间分组存储- 然后将这些时间片定期写入 S3。一个时间片将被存储到一个 S3 对象中——时间片信息是文件名的一部分。
如果/当更多事件出现在过去的某个时间片中 - 它被添加到 Cassandra 中的那个时间片表中,并且 [最终] 触发了对 S3 的重新写入 - 这将再次获取该时间片的所有事件并以相同的方式写入 S3文件名,有效地覆盖现有文件(如果有)。
您必须决定要在 Cassandra 中保留数据多长时间 - 基于管道的工作方式以及传入事件的“旧”程度。
这就是我们如何实现幂等性。这可能不是最有效的方式 - 但它对我们来说效果很好,因为我们有非常高的事件处理量和速率,而且 Cassandra 非常适合快速写入。
我很想听听其他人是如何解决类似问题的!
| 归档时间: |
|
| 查看次数: |
1184 次 |
| 最近记录: |