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



这个问题可能是这样的。我正在尝试收集关于如何实现BGP管道的想法。

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

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

到目前为止,我所做的是:将它们分组在"5分钟"文件(消息端到端(中,这是BGP收集工具的常见做法,并在数据库中添加链接。我意识到了一些缺点:复杂(必须按键分组,管理Kafka偏移提交(,没有精细的起点/终点选择。

我的想法是:使用一个数据库(Clickhouse/Google BigTable/Aamazon Redshift(,插入每个带有元数据的条目和存储在S3/Google Cloud存储/本地文件上的唯一更新的链接。

我担心下载性能(很可能是通过HTTP(,因为将所有更新编译成一个状态可能需要数千条这样的消息。你有批量下载这个的经验吗?我不认为将更新直接存储在数据库中也是最佳的。

有什么意见、想法、建议吗?谢谢

Cloud Bigtable每个"节点"每秒能够处理10000个请求,每个节点每小时的成本为0.65美元。最小的生产集群是3个节点,每秒总共30000行。您的应用程序每秒最多需要1000个请求。虽然Cloud Bigtable可以处理您的工作量,但我建议您考虑Firestore。

如果每条消息只需要几个K,为了便于使用,我还会考虑将整个值放在数据库中,而不仅仅是元数据。

到目前为止我所做的是:将它们分组在"5分钟"文件中(消息端到端(,这是BGP收集工具的常见操作,并在数据库中添加链接。我意识到了一些缺点:复杂(必须按键分组,管理Kafka偏移提交(,没有精细的起点/终点选择。

为什么不试试Kafka流,它提供了窗口功能,然后只按键分组并转储到数据库中?使用Kafka流,您不必担心逐个密钥的分组和您提到的许多其他问题。

如果Kafka流对您来说不是一个选项,那么只需将消息存储在数据库中,每次更新一个,dB读取器就可以按时间窗口和密钥进行分组。

最新更新