scribe是大名鼎鼎的facebook开源软件,网上很多人喜欢说它是日志采集软件,其实更加准确的说法应该是数据传输软件。scribe本身并没有日志采集的功能,它只能接收别的软件传输过来的数据,并将该数据传输到其他地方。
既然是传输软件,就要使用一个网络传输协议。scribe使用的thrift协议(后续会有该系列分享)。网络传输协议有了,还需要数据传入软件、数据接收软件和scribe一起搭配才能完成最终的日志或其他数据传输系统。
日志采集方:可以根据自己的需要使用c++、java或python等任何一种语言实现日志采集功能,并按照thrift协议,调用scribe提供的rpc接口,便可将采集到的数据传输到scribe中。
日志接受方:scribe可以将接收到的数据发送到另一个实现了scribe数据接rpc接口的其他系统、hdfs或本地磁盘。
scribe整体可以分为两个大模块:数据接收模块和数据发送模块。
数据接收模块:此模块是thrift线程进行处理,线程数是可以配置的,因此scribe同一时刻可以接收多个采集器。thrift线程将接收到的数据放到一个缓存中,就结束了它的使命,进而等待下一次的数据接收。
数据发送模块:主要将接收到的数据从缓存中取出并发送到数据接收方。以多线程的方式进行数据发送。线程数由配置文件决定。
scribe内部工作原理如下图所示: