Flume监听日志文件并存入Kafka中消费

第一步

配置Flume配置文件

此配置可以去官网搜索,简单修改即可
链接:

https://flume.apache.org/releases/content/1.7.0/FlumeUserGuide.html

创建监听日志文件的配置:/usr/apps/flume-1.7.0/kafka-producer.conf

pro.sources = s1
pro.channels = c1
pro.sinks = k1
 
pro.sources.s1.type = exec
pro.sources.s1.command = tail -F /usr/apps/tmp/logs.log          
 
pro.channels.c1.type = memory
pro.channels.c1.capacity = 1000
pro.channels.c1.transactionCapacity = 100
 
pro.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
pro.sinks.k1.kafka.topic = log-test
pro.sinks.k1.kafka.bootstrap.servers = master:9092,slave1:9092,slave2:9092
pro.sinks.k1.kafka.flumeBatchSize = 20
pro.sinks.k1.kafka.producer.acks = 1
pro.sinks.k1.kafka.producer.linger.ms = 1
pro.sinks.k1.kafka.producer.compression.type = snappy
 
pro.sources.s1.channels = c1
pro.sinks.k1.channel = c1

第二步

在虚拟机上开启监听

在flume的根目录下执行以下命令


第一种写法:
 bin/flume-ng agent -c conf/ -n pro -f job/kafka-producer.conf -Dflume.root.logger=INFO,console
 
第二种写法:
 bin/flume-ng agent --conf conf/ --name pro --conf-file job/kafka-producer.conf -Dflume.root.logger=INFO,console

参数说明:
–conf/-c:表示配置文件存储在 conf/目录
–name/-n:表示给 agent 起名为 pro
–conf-file/-f:flume 本次启动读取的配置文件是在 job 文件夹下的 kafka-producer.conf文件。
-Dflume.root.logger=INFO,console :-D 表示 flume 运行时动态修改 flume.root.logger参数属性值,
并将控制台日志打印级别设置为INFO 级别。日志级别包括:log、info、warn、error。

第三步

启动消费者

复制会话在kafka目录下开启消费者命令:
./bin/kafka-console-consumer.sh --bootstrap-server 192.168.38.144:9092 --topic log-test

Flink连接Kafka进行消费

package 用Flink消费kafka中的数据

import org.apache.flink.api.common.serialization.SimpleStringSchema
import org.apache.flink.streaming.api.scala._
import org.apache.flink.streaming.connectors.kafka.FlinkKafkaConsumer011

import java.util.Properties

object Flink_test {

  def main(args: Array[String]): Unit = {
    val prop = new Properties()
    //封装kafka的连接地址
    prop.setProperty("bootstrap.servers", "192.168.38.144:9092")
    //指定消费者id
    prop.setProperty("group.id", "flink")

    val env = StreamExecutionEnvironment.getExecutionEnvironment
    val stream = env.addSource(new FlinkKafkaConsumer011[String]("log-test", new SimpleStringSchema(), prop))

    stream.print()
    env.execute()
  }
}

效果图日志采集效果图

遇到的问题:

如果Flink消费不到Kafka的消息:

第一步:检查config目录下的server.properties文件

在这里插入图片描述
这两行必须要有!

(ip根据自己的机器所定:意思是将图中的slave2改成自己的虚拟机ip)

改完之后重启kafka!重启之后保证以下进程都开启)
在这里插入图片描述

第二步:检查自己电脑的hosts文件

hosts文件的位置:C:\Windows\System32\drivers\etc
在这里插入图片描述
不要打开错了,用记事本打开
在这里插入图片描述
注意:ip和主机名之间要有空格
然后ctrl+s保存就可以了。

最后一步:重新运行代码和kafka消费者!

Flume是一个分布式、可靠且可用的系统,用于高效地收集、聚合和移动大量日志数据。Kafka是一个高吞吐量的分布式消息系统。将FlumeKafka结合使用,可以实现实时数据流的采集和传输。 以下是将Flume采集的实时数据流存Kafka指定Topic中的步骤: ### 1. 配置Flume Agent 首先,需要配置Flume Agent以从数据源收集数据并将其发送到Kafka。以下是一个示例配置文件`flume.conf`: ```properties # 定义Agent的名称和组件 agent1.sources = source1 agent1.sinks = sink1 agent1.channels = channel1 # 配置数据源 agent1.sources.source1.type = netcat agent1.sources.source1.bind = localhost agent1.sources.source1.port = 44444 # 配置Kafka Sink agent1.sinks.sink1.type = org.apache.flume.sink.kafka.KafkaSink agent1.sinks.sink1.topic = mytopic agent1.sinks.sink1.brokerList = localhost:9092 agent1.sinks.sink1.requiredAcks = 1 agent1.sinks.sink1.batchSize = 20 # 配置Channel agent1.channels.channel1.type = memory agent1.channels.channel1.capacity = 1000 agent1.channels.channel1.transactionCapacity = 100 # 绑定Source和Sink到Channel agent1.sources.source1.channels = channel1 agent1.sinks.sink1.channel = channel1 ``` ### 2. 启动Flume Agent 使用以下命令启动Flume Agent: ```sh flume-ng agent --conf /path/to/conf --conf-file /path/to/flume.conf --name agent1 -Dflume.root.logger=INFO,console ``` ### 3. 启动Kafka 确保Kafka服务已经启动,并且指定的Topic已经创建。如果没有创建,可以使用以下命令创建: ```sh kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic mytopic ``` ### 4. 验证数据流 可以使用Kafka提供的消费者工具来验证数据是否已经成功发送到Kafka: ```sh kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic mytopic --from-beginning ``` 通过以上步骤,Flume采集的实时数据流将被存Kafka指定的Topic中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值