如何避免卡夫卡的局限?

Ste*_*han 8 java bigdata business-intelligence apache-kafka

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

数据由一组大量日志消息表示.每条日志消息都有:

  • 一个产品
  • 动作类型
  • 一个约会
  • 消息有效载荷

系统细节:

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

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

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

我们的问题:

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

Ste*_*han 3

我发布这个答案是为了让其他用户可以看到我们采用的解决方案。

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

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

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

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

  3. API(许多系统使用它来获取显示数据)

顺便说一句:我们尝试了其他解决方案,例如 HBase、Storm 等,但没有一个能够满足我们的需求。