Flume与Kafka对接

Flume对接Kafka

Flume组件: agent source channel sink

kafka组件: producer 节点集群服务器 **consumer **

1.形式1: FLume --> Kafka的对接

此时Flume中的sink是生产者, 让kafka来接收

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

1.1KafkaSink

将用flume监测端口数据,传送到 ksfka

(1)创建netcat-flume-kafka.conf 配置文件

[itwise@node2 ~]$ cd /opt/module/flume-1.9.0/jobs/
创建文件夹
[itwise@node2 jobs]$ mkdir flume--kafka
[itwise@node2 flume--kafka]$ vim netcat-flume-kafka.conf

配置文件如下:

#Named
a1.sources = r1
a1.channels = c1
a1.sinks = k1
#Source
a1.sources.r1.type = netcat
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 6666
#Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 100
#Sink
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.kafka.bootstrap.servers = node2:9092,node3:9092,node4:9092
a1.sinks.k1.kafka.topic = flumetopic
a1.sinks.k1.kafka.flumeBatchSize = 100
a1.sinks.k1.useFlumeEventFormat = true
a1.sinks.k1.kafka.producer.acks = -1
#Bind
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

1.2运行:

启动一个node2窗口,创建一个消费者,消费kafka中的flumetopic中的数据

kafka-console-consumer.sh --bootstrap-server node2:9092 --topic flumetopic

再启动一个node2端口:运行如下命令

flume-ng agent -c $FLUME_HOME/conf -f $FLUME_HOME/jobs/flume--kafka/netcat-flume-kafka.conf -n a1 -Dflume.root.logger=INFO,console

启动第三监控窗口输入消息

nc localhost 6666

1.3运行截图:三合一

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2. Flume -> Kafka : KafkaSink topic支持

此时Flume中的sink是生产者, 让kafka来接收,将flume管道多路复用

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.1创建配置文件netcat-flume-kafkatopic.conf

[itwise@node2 ~]$ cd /opt/module/flume-1.9.0/jobs/
[itwise@node2 flume--kafka]$ vim netcat-flume-kafkatopic.conf

配置文件如下:

#Named
a1.sources = r1
a1.channels = c1
a1.sinks = k1
#Source
a1.sources.r1.type = netcat
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 6666
#Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 100
#Interceptor
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type =com.itwise.flume_kafka.Topics_Interceptor$MyBuilder
#Sink
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.kafka.bootstrap.servers =node2:9092,node3:9092,node4:9092
a1.sinks.k1.kafka.topic = topicother
a1.sinks.k1.kafka.flumeBatchSize = 100
a1.sinks.k1.useFlumeEventFormat = true
a1.sinks.k1.kafka.producer.acks = -1
#Bind
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

(2)编写java代码,接口实现数据分发到不同的topic上:

package com.itwise.kafka.flumeinterceptor;
import org.apache.flume.Context;
import org.apache.flume.Event;
import org.apache.flume.interceptor.Interceptor;
import java.nio.charset.StandardCharsets;
import java.util.List;
public class DataValueInterceptor implements Interceptor {
@Override
public void initialize() {
}
@Override
public Event intercept(Event event) {
//实现逻辑 判断 //javaspring hadoop
String body = new String(event.getBody(), StandardCharsets.UTF_8);
if(body.startsWith("java")){
event.getHeaders().put("topic", "java");
}else if(body.startsWith("hadoop")){
event.getHeaders().put("topic", "hadoop");
}else{
event.getHeaders().put("topic", "other");
}
return event;
}
@Override
public List<Event> intercept(List<Event> list) {
for (Event event : list) {
intercept(event);
}
return list;
}
@Override
public void close() {
}
public static class MyBuilder implements Builder{
@Override
public Interceptor build() {
return new DataValueInterceptor();
}
@Override
public void configure(Context context) {
}
}
}

将自定义拦截器打包上传到flume的lib包下:

2.2启动命令:

[itwise@node2 ~]$ flume-ng agent -c $FLUME_HOME/conf -f $FLUME_HOME/jobs/flume--kafka/netcat-flume-kafkatopic.conf -n a1 -Dflume.root.logger=INFO,console

往端口发送数据:

nc localhost 6666

启动消费者3个:分别取访问:java hadoop other

kafka-topics.sh --list --bootstrap-server node2:9092
kafka-console-consumer.sh --bootstrap-server node2:9092 --topic java --from-beginning
kafka-console-consumer.sh --bootstrap-server node2:9092 --topic hadoop --from-beginning
kafka-console-consumer.sh --bootstrap-server node2:9092 --topic other --from-beginning

2.3演示:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3. Kafka–>Flume : Kafka Source

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

3.1新建配置文件kafka-flume-logger.conf

#Named
a1.sources = r1
a1.channels = c1
a1.sinks = k1
#Source
a1.sources.r1.type =org.apache.flume.source.kafka.KafkaSource
a1.sources.r1.kafka.bootstrap.servers =node2:9092,node3:9092
a1.sources.r1.kafka.topics = itwise
a1.sources.r1.kafka.consumer.group.id = flume
a1.sources.r1.batchSize = 100
a1.sources.r1.useFlumeEventFormat = false
#Channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 10000
a1.channels.c1.transactionCapacity = 100
#Sink
a1.sinks.k1.type = logger
#Bind
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

3.2启动

1)flume消费者 运行代码;

flume-ng agent -c $FLUME_HOME/conf -f $FLUME_HOME/jobs/kafka--flume/kafka-flume-logger.conf -n a1 -Dflume.root.logger=INFO,console

2)启动一个kafka生产者:

查看列表
kafka-topics.sh --list --bootstrap-server node2:9092
查看主题状态
kafka-topics.sh --describe --bootstrap-server node2:9092 --topic itwise
使用生产者
kafka-console-producer.sh --topic itwise --broker-list node2:9092

3.3效果演示:

kafka生产者产生数据

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

flume消费者: 效果加了一个headers

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.KafkaChannel --> xxxSink

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

4.1创建一个配置文件:kafkachannel-flume-logger.conf

#Named
a1.channels = c1
a1.sinks = k1
#Source
#Channel
a1.channels.c1.type =org.apache.flume.channel.kafka.KafkaChannel
a1.channels.c1.kafka.bootstrap.servers =node2:9092,node3:9092,node4:9092
a1.channels.c1.kafka.topic = itwise
a1.channels.c1.kafka.consumer.group.id = flume
#将offset提交方式设置为latest,最后数据
a1.channels.c1.kafka.consumer.auto.offset.reset = latest
a1.channels.c1.parseAsFlumeEvent = false
#Sink
a1.sinks.k1.type = logger
#Bind
a1.sinks.k1.channel = c1

4/2运行:

启动下游消费者flume

flume-ng agent -c $FLUME_HOME/conf -f $FLUME_HOME/jobs/kafka/kafkachannel-flume-logger.conf -n a1 -Dflume.root.logger=INFO,console

启动生产者 kafka

 kafka-console-producer.sh --topic itwise --broker-list node2:9092

4.3演示:

生产者

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

消费者:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.xxxSource --> KafkaChannel

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

5.1配置生产者文件 netcat-flume-kafkachannel.conf

#Named
a1.sources = r1
a1.channels = c1
#Source
a1.sources.r1.type = netcat
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 6666
#Channel
a1.channels.c1.type=org.apache.flume.channel.kafka.KafkaChannel
a1.channels.c1.kafka.bootstrap.servers=node2:9092,node3:9092,node4:9092
a1.channels.c1.kafka.topic = itwise
a1.channels.c1.parseAsFlumeEvent = false
#Sink
#Bind
a1.sources.r1.channels = c1

5.2运行:

启动消费者 并且调动之前的数据:

kafka-console-consumer.sh --topic itwise --bootstrap-server node2:9092 --from-beginning

启动生产者录入数据

nc localhost 6666
flume-ng agent -c $FLUME_HOME/conf -f $FLUME_HOME/jobs/kafka/netcat-flume-kafkachannel.conf -n a1 -Dflume.root.logger=INFO,console

5.3演示:

生产者监控端口输入消息:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

kafka处理:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

消费者消费数据:加载之前的数据

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

nc localhost 6666
flume-ng agent -c $FLUME_HOME/conf -f $FLUME_HOME/jobs/kafka/netcat-flume-kafkachannel.conf -n a1 -Dflume.root.logger=INFO,console

5.3演示:

生产者监控端口输入消息:

[外链图片转存中…(img-K5dNNCGA-1713315009021)]

kafka处理:

[外链图片转存中…(img-RUbx6MQB-1713315009021)]

消费者消费数据:加载之前的数据

[外链图片转存中…(img-lGYHCcQ8-1713315009022)]

  • 22
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要配置FlumeKafka的集成,可以按照以下步骤进行操作: 1. 首先,需要在Flume的配置文件中定义source、sink和channel。其中,source指定为Kafka的source端,sink指定为Kafka的sink端,channel用于在source和sink之间传递数据。配置文件中的示例配置可以参考引用中的flume-kafka.conf。 2. 如果要将Kafka作为source端,需要在配置文件中设置source的类型为kafka,并指定Kafka的相关参数,如Kafka的地址、topic名称等。 3. 启动Flume之前,确保Zookeeper和Kafka已经成功启动。因为Flume在启动时会连接Kafka,如果Kafka未启动,会导致连接错误。参考引用中的说明。 4. 如果要将Kafka作为sink端,需要在配置文件中设置sink的类型为kafka,并指定Kafka的相关参数,如Kafka的地址、topic名称等。 5. 在启动Flume之前,需要确保Zookeeper集群和Kafka集群已经成功启动。 6. 可以使用命令行创建和查看Kafka的topic,以及创建Kafka的消费者。具体命令可以根据实际需求进行设置。 7. 启动Flume,并发送消息到Flume的端口。 8. 在Kafka的消费者中接收消息,验证数据是否成功传输。 需要注意的是,在配置FlumeKafka的过程中,需要根据实际情况调整相关参数,确保FlumeKafka能够正确地进行数据传输和接收。配置文件的具体内容可以参考引用中的示例配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Flume对接Kafka详细过程](https://blog.csdn.net/qq_47183158/article/details/112179052)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [玩转Flume+Kafka原来也就那点事儿](https://blog.csdn.net/weixin_34189116/article/details/89658220)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [快速学习-Flume 对接 Kafka](https://download.csdn.net/download/weixin_38592548/14885746)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值