Skip to content
This repository has been archived by the owner on Jun 16, 2023. It is now read-only.

开发经验总结

Longda edited this page Dec 26, 2013 · 8 revisions
  • 在架构上,推荐 “消息中间件 + jstorm + 外部存储” 3架马车式架构

    • JStorm从消息中间件中取出数据,计算出结果,存储到外部存储上
    • 通常消息中间件推荐使用RocketMeta,Kafka
    • 外部存储推荐使用HBase,Mysql
    • 该架构,非常方便JStorm程序进行重启(如因为增加业务升级程序)
    • 职责清晰化,减少和外部系统的交互,JStorm将计算结果存储到外部存储后,用户的查询就无需访问JStorm中服务进程,查询外部存储即可。 *在实际计算中,常常发现需要做数据订正,因此在设计整个项目时,需要考虑重跑功能 *在meta中,数据最好带时间戳 *如果计算结果入hadoop或数据库,最好结果也含有时间戳
  • 如果使用异步kafka/meta客户端(listener方式)时,当增加/重启meta时,均需要重启topology

  • 如果使用trasaction时,增加kafka/meta时, brokerId要按顺序,即新增机器brokerId要比之前的都要大,这样reassign spout消费brokerId时就不会发生错位。

  • 非事务环境中,尽量使用IBasicBolt

  • 计算并发度时,

    • spout 按单task每秒500的QPS计算并发
    • 全内存操作的task,按单task 每秒2000个QPS计算并发
    • 有向外部输出结果的task,按外部系统承受能力进行计算并发。
  • 对于MetaQ 和 Kafka,

    • 拉取的频率不要太小,低于100ms时,容易造成MetaQ/Kafka 空转次数偏多
    • 一次获取数据Block大小推荐是2M或1M,太大内存GC压力比较大,太小效率比较低。
  • 推荐一个worker运行2个task

  • 条件允许时,尽量让程序可以报警,比如某种特殊情况出现时,比如截止到凌晨2点,数据还没有同步到hadoop,发送报警出来

哪位朋友有好的经验愿意分享, 可以发邮件给我们 [email protected]

Clone this wiki locally