如何避免卡夫卡的局限?

时间:2014-07-21 11:06:21

标签: java bigdata business-intelligence apache-kafka

我们正在尝试构建一个BI系统,该系统将收集应由其他组件处理的大量数据 我们决定建立一个中间层来收集,存储和放置是一个好主意。分发数据。

数据由大量日志消息表示。每条日志消息都包含:

  • 产品
  • 动作类型
  • 约会
  • 消息有效负载

系统细节:

  • 平均值:150万条消息/分钟
  • 峰值:每分钟1500万条消息
  • 平均邮件大小为:700字节(aprox 1.3TB /天)
  • 我们有200个产品
  • 我们有1100种动作类型
  • 应每5分钟摄取一次数据
  • 消费者应用程序通常需要1-2-3个产品,1-2-3个动作类型(我们需要快速访问1个产品/ 1个动作类型)

我们以为卡夫卡会做这个工作,但我们遇到了几个问题 我们尝试为每个产品类型和每个产品的分区创建一个主题。通过这样做,我们可以提取1个产品/ 1动作类型来消费。

最初我们遇到“打开文件太多”的问题,但在我们更改服务器配置以支持更多文件后,我们发现内存不足错误(12GB分配/节点)
此外,我们遇到卡夫卡稳定性问题。在众多话题中,卡夫卡倾向于冻结。

我们的问题:

  • Kafka适合我们的用例场景吗?它可以支持如此众多的主题/分区吗?
  • 我们能否以另一种方式组织Kafka中的数据以避免这些问题,但仍然能够为1个产品/ 1个动作类型提供良好的访问速度?
  • 您是否推荐其他更适合此类型的Kafka替代品?

1 个答案:

答案 0 :(得分:3)

我发布此答案,以便其他用户可以看到我们采用的解决方案。

由于Kafka的限制(导致操作系统达到几乎达到最大打开文件的大量分区)和性能稍差,我们决定使用apache commons,guava,trove等库来构建一个自定义框架以满足我们的需求等,以实现我们所需的性能。

整个系统(分布式和可扩展)有3个主要部分:

  1. ETL(读取数据,处理数据并将其写入二进制文件)

  2. Framework Core(用于读取二进制文件并计算统计数据)

  3. API(许多系统用于获取数据以供显示)
  4. 作为旁注:我们尝试过其他解决方案,如HBase,Storm等,但没有一个能满足我们的需求。