Cassandra 中的分布式日志

Distributed logs in Cassandra

我正在寻找在 Cassandra 中存储应用程序日志的方法。

我有三个节点设置(节点 1、节点 2 和节点 3),其中我的 Web 应用程序在所有三个节点中作为集群运行并进行负载平衡,因此将从所有节点生成日志。

Cassandra 在所有三个节点中运行,日志从所有三个 Web 应用程序转储到每天分区的 Cassandra 集群中。

这种方法的问题:
1) 我正在使用我的网络应用程序将数据写入 Cassandra。
2)每天分区,数据量很大

那么有更好的方法吗?

这是好的设计方法吗?

在 Cassandra 中存储日志的选择值得商榷;因为对该数据的分析变得困难但可行。 ELK (Elastic-Logstash-Kibana) 或 Splunk 是更受欢迎的日志分析选择,因为它们具有原生 "text" 搜索支持和仪表板。

说了这么多,还是看看手头的问题吧

1) I am using my web application to write the data to Cassandra.

我想到的建议是:

  • 写入是异步完成的吗?推荐。
  • 这些写入过程中使用的一致性级别是多少?一致性越高,Web 应用程序将变得越慢,因为它在 C* 上等待的时间越长(假设同步写入)。记住 C* 仍然可以有 RF = 3,但你可以做一致性 = 1。
  • 如果 C* 集群出现故障会怎样?网络应用程序会随之下降吗?

2) For every day partition, the amount of data is very high

  • 这里有两个问题 - 胖分区和同一节点一整天都被命中(导致热点)。工作负载未分配到整个集群。
  • 分区大小可以减少到每小时而不是全天。但我们只是将一个节点被击中的足迹从一天减少到一个小时。它仍然是一个小时的热点。
  • 您可以进行 "second" 级分区,以在节点之间实现数据的均匀分布,而不会造成巨大的分区(取决于应用程序的繁琐程度)。但这就是 C* 用于日志监控的优点受到质疑的地方吗?
  • C* 可以解决哪些查询?我如何聚合二级数据分区并回答典型日志分析中出现的各种问题?

重新审视设计,此 C* 数据库必须回答哪些日志分析问题(查询)?答案应该自动排列。