flume和kafka的完美配合

1 篇文章 0 订阅
1 篇文章 0 订阅

flume和kafka的完美配合

一.为什么使用KafkaChannel?

在使用flume对接Kafka时,我们往往使用TailFileSource–>MemoryChannel–>KafkaSink的这种方式,然后将数据输送到Kafka集群中。如图所示:
在这里插入图片描述

但是这种方式有弊端:
1.TailFileSource只能监听一个文件
2.MemoryChannel数据会有堆积,内存可能溢出(而FileChannel又比较慢)
3.这种方式经历多个组件,效率变低,出现问题的概率也变大。

新的思路:
使用TailFileSource–>KafkaChannel这种方式,将KafkaChannel作为缓冲,效率变高,而且数据不会丢失。如图所示:
在这里插入图片描述
这种方法就是使用TailFileSource来读取日志文件,然后将数据输送到KafkaChannel种,然后KafkaChannel直接将数据输送到Kafka集群中,此时不需要Sink,KafkaChannel相当于Kafka的生产者,这样就充分利用了Kafka集群的优点,当数据量很大的时候,也能hold得住。

如果要将数据写入到HDFS或者ES中,要再创建一个flume集群,这个flume中只要有KafkaChannel和HDFSSink就可以了,此时的KafkaChannel相当于Kafka的消费者。但是要注意,为了避免多个flume消费同样的数据,要将多个flume实例放在同一个组内。

下面是flume官网给出的介绍:
在这里插入图片描述

KafkaChannel的使用

书写flume的配置文件

a0.conf

#bin/flume-ng agent -n a0 -f /home/hadoop/a0.conf -c conf -Dflume.root.logger=INFO,console
#定义agent名, source、channel、sink的名称
a0.sources = r1
a0.channels = c1

#具体定义source
a0.sources.r1.type = cn.baidu.flume.source.TailFileSource
a0.sources.r1.filePath = /Users/zx/Documents/logs/access.txt
a0.sources.r1.posiFile = /Users/zx/Documents/logs/posi.txt
a0.sources.r1.interval = 2000
a0.sources.r1.charset = UTF-8

a0.sources.r1.interceptors = i1
a0.sources.r1.interceptors.i1.type = cn.baidu.flume.interceptor.JsonInterceptor$Builder
a0.sources.r1.interceptors.i1.fields = id,name,money,age
a0.sources.r1.interceptors.i1.separator = ,

a0.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel
a0.channels.c1.kafka.bootstrap.servers = kafka所在机器的主机名
a0.channels.c1.kafka.topic = usertest
a0.channels.c1.parseAsFlumeEvent = false

a0.sources.r1.channels = c1

转载来源 https://blog.csdn.net/weixin_43866709/article/details/89946601

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值