储存小型二进制文件流的最佳方法(BGP更新)

时间:2018-08-02 19:56:00

标签: database file apache-kafka bgp

这个问题可能看起来像this。 我正在尝试收集有关如何实现BGP管道的想法。

我通过Kafka每秒接收100-1000条消息(BGP更新),每次更新几千字节。

我需要以带有一些元数据的二进制格式将它们存档,以便快速查找:我正在定期构建BGP表的“状态”,该表将合并在一定时间内收到的所有更新。因此需要数据库。

到目前为止,我一直在做的事情:将它们分组为“ 5分钟”文件(端到端消息),因为这对于BGP收集工具来说很常见,并将链接添加到数据库中。 我意识到一些缺点:复杂(必须按键分组,管理Kafka偏移提交),没有很好的选择从哪里开始/结束。

我在想什么:使用数据库(Clickhouse / Google BigTable / Amazon Redshift)并插入每个带有元数据的条目以及指向存储在S3 / Google Cloud存储/本地文件中的唯一更新的链接。

我担心下载性能(很可能是通过HTTP),因为将所有更新编译到一个状态可能会花费数千条这些消息。您有批量下载此文件的经验吗? 我认为将更新直接存储在数据库中也不是最佳选择。

有任何意见,想法和建议吗? 谢谢

2 个答案:

答案 0 :(得分:0)

  

到目前为止,我一直在做的事情:将它们分组为“ 5分钟”文件(端到端消息),因为这对于BGP收集工具来说很常见,并将链接添加到数据库中。我意识到一些缺点:复杂(必须按键分组,管理Kafka偏移提交),没有很好的选择从哪里开始/结束。

为什么不尝试使用Kafka-streams来提供窗口功能,然后仅按键分组并转储到数据库中? 使用Kafka-streams,您不必担心按组列出的关键问题以及您提到的许多其他问题。

如果您不选择使用Kafka-streams,则只需一次将更新一次的消息存储在数据库中,dB阅读器就可以按时间窗口和键进行分组。

答案 1 :(得分:0)

Cloud Bigtable每个“节点”每秒可处理10,000个请求,每小时每个节点$ 0.65。最小的生产集群是3个节点,每秒总计30,000行。您的应用程序每秒最多请求1,000个请求。尽管Cloud Bigtable可以处理您的工作量,但我建议您考虑使用Firestore

为每条消息添加几千个K,我还将考虑将整个值而不是仅元数据放入数据库中,以便于使用。