几个开源的日志系统

最近在看几个日志系统,写下以备忘。感觉挺多都设计得挺类似的,比方说合并小文件以减少对文件系统的IO,或者说end-to-end等方式实现高可靠性等。当然也有一些实现细节上的不同与特殊之处。简单记录如下:

  • Chukwa

    • agent 收集数据
    • adaptor 预处理数据
    • collector 采集合并数据 agent会选择一个空闲的collector
    • demux 数据处理
    • archive 文件合并成Sequence File,去除重复内容
  • Kafka消息发布订阅系统,消息按topic组织,topic再按partition分区,使用zookeeper做负载均衡;

    • 无内存缓存;
    • 顺序append数据,积累到一定程度再删除;
    • 消息投递为客户端主动pull;
    • broker 使用zero-copy(DMA)提高速率
    • producer 两种接口,向broker发布,通过zookeeper注册listener及获取所有broker
    • consumer 两种接口,将消息写向中央存储
  • Scribe当后端存储系统crash时,scribe将数据写到本地磁盘,待正常后重新加载

    • agent 使用thrift client发送数据
    • collector 根据配置文件,将不同的topic发送到不同的对象
    • store 支持的类型丰富
  • Timetunnel使用zookeeper负责broker和client的状态同步

    • 使用thrift做通讯层
    • client 安全认证,发布,认证的API
    • router 访问入口;负责路由,安全认证,负载均衡;通过安全认证后,使client和broker建立正确的连接
    • broker 负责消息的存储转发
  • Flume agent三种级别的可靠性:end-to-end, Store on failure(类似Scribe), Best effort

    • agent, collector和storage均可水平拓展
    • agent和collector由master统一管理
    • agent 由source和sink组成,将数据源的数据发送给collector
    • collector 由source和sink组成,汇总agent的数据,存到storage
    • storage
    • master 管理协调agent和collector的配置等信息;分单点和多点模式,多点模式容错性好

总的感觉是,Kafka实现得很好,不过可能因为是Linkedin自己根据自己的一些场景来弄的。所以通用性可能不如Flume好。Flume现在应该是最通用和成熟的。目前这几个都是可以将日志记录到HDFS上,以便于使用Hadoop等进行进一步分析处理。