1. 介绍

本文主要参考flume官方文档

根据官方文档,我们主要讨论以下几类channel

  1. memory channel
  2. jdbc channel
  3. kafka channel
  4. file channel
  5. spillable memory channel
  6. pseudo transaction channel
  7. custom channel

2. memory channel

把event放到内存队列当中。使用这种channel会再agent挂掉的时候导致数据丢失。

  1. 优点:速度最快的channel、容易配置
  2. 缺点:agent挂了会丢数据

3. jdbc channel

event持久化存储到DB。现在仅支持嵌入式的derby

  1. 优点:可以防止丢数据了,而且还提供了一些数据管理
  2. 缺点:持久化到DB仅支持derby,选择较少,速度没有memory channel快

4. file channel

持久化event到磁盘

  1. 优点:可靠性很好
  2. 缺点: 速度慢

5. Spillable Memory Channel、Pseudo Transaction Channel

  1. Spillable Memory Channel: 内存不满则将event放内存,内存满了放磁盘。速度比file channel快了,但是仍然会丢数据。官方文档也推荐不要在生产环境使用这种channel
  2. Pseudo Transaction Channel: 单元测试的时候拿来用的。显然,千万别在生产环境上用。

6. customer channel

如果觉得都不满意,还可以自己实现channel

配置的时候type写上完整包名和类名即可

7. kafka channel

为什么要放到最后讲呢?因为这个channel是比较推荐的方式。

优点:

  1. 可靠性好:因为event都已经存储在KAFKA。利用kafka的分区复制特性可以保证数据不丢
  2. 速度快:速度虽然没memory channel快,但是比file channel有了很大的提升。毕竟kafka本身做了大量的优化

缺点:
要说缺点的话,就是需要维护额外的kafka集群,消耗了资源。

其他参考资料:

  1. Flume-NG之KafkaChannel
  2. flume高并发优化——(4)kafka channel