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

Best way to store stream of small binary files (BGP updates)

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

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

我需要用一些元数据以二进制格式存档它们以便快速查找:我正在定期构建一个 "state" BGP table 它将合并在特定时间内收到的所有更新.因此需要一个数据库。

到目前为止我在做什么:将它们分组在“5 分钟”文件中(消息端到端),因为这对 BGP 收集工具来说很常见,并在数据库中添加 link。 我意识到一些缺点:复杂(必须按键分组,管理 Kafka 偏移提交),没有很好的选择 start/end.

我在想什么:使用数据库(Clickhouse/Google BigTable/Amazon Redshift)并将每个条目与元数据和 link 插入到存储在 [=29 上的唯一更新中=]云storage/local文件.

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

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

What I was doing until now: group them in "5 minute" files (messages end-to-end) as it is common thing for BGP collection tools and add the link in a database. I realize some disadvantages: complicated (having to group by key, manage Kafka offset commit), no fine selection where to start/end.

你为什么不试试 Kafka-streams,它给你 windowing 功能,然后按键分组并转储到数据库中? 使用 Kafka-streams,您将不必担心 group by key 和您提到的许多其他问题。

如果 Kafka-streams 不是您的选择,那么只需在数据库中一次更新一条消息,然后 dB reader 可以按时间 window 和键分组。

Cloud Bigtable 每秒能够处理 10,000 个请求 "node",每个节点每小时收费 0.65 美元。最小的生产集群是 3 个节点,每秒总共 30,000 行。您的应用程序每秒最多调用 1,000 个请求。虽然 Cloud Bigtable 可以处理您的工作负载,但我建议您考虑 Firestore.

在每条消息几 K 的情况下,我还会考虑将整个值放入数据库中,而不仅仅是元数据以便于使用。