一个Transaction是通过channel实现的。每个source以及都需要连接channel,但是不包括transaction对象。source实际上是使用channelSelector接口实现Transaction.Event的存储以及消费都在一个Transaction活动中。比如:

    sink从channel中取出event,然后转发给下一个节点或者存储在外部的存储点。一个sink与一个channel协同工作,在FLume的配置文件中设置。有一个SinkRunner实例会管理每个配置的sink,当flume 框架调用sinkRunner.start()方法的时候,新的线程将会开启用于扮演sink的角色(使用sinkRunner.PollingRunner作为线程的Runable).这个线程管理了sink的生命周期。sink需要实现start()以及stop()方法,作为LifecycleAware接口的一部分。Sink.start()方法用于初始化sink,并切换到可以处理Event的状态。Sink.process()方法负责把channel中的数据取出提取Event事件。Sink.stop()方法则负责必要的清理工作(释放资源)。sink通过实现configurable接口,也可以自行进行一些配置。

    Source

    与sinkRunner.PollingRunner的Runable类似,PollingRunner Runable可以通过PollableSourceRunner.start()创建。