flume通过netcat收集Android用户产生数据

目标:通过flume收集安卓用户产生数据,存储到服务器文件

由于目前我这边的局限性所以我用如下的思路来实现它:

                 首先通过UDP 的socket将用户产生的信息发送到中间的缓存服务器(因为TCP只提供端到端传输,多个客户同时发送数据时就会出现端口占用情况,所以这里我使用UDP)。

                 然后缓存服务器到达一定数据量将数据通过TCP的socket发送到flume服务器上

首先flume配置如下,当然还可以存到hdfs或hive等地只需改配置文件即可

#ie the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = XVII
a1.sources.r1.port = 12345

# Describe the sink
a1.sinks.k1.type = file_roll
#a1.sinks.k1.channel = c1
a1.sinks.k1.sink.directory = /home/hadoop/Documents

# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

启动:

bin/flume-ng agent --conf conf --conf-file conf/android.conf --name a1 -Dflume.root.logger=INFO,console

你简单可以测试一下是否可用

使用如下命令向flume服务器发消息 。

telnet XVII 12345

缓存服务器代码如下。

public class AndroidMemServer {
    public static void main(String[] args) throws IOException {
        StringBuffer stringBuffer=new StringBuffer();
        DatagramSocket serverSocket = new DatagramSocket(2333);
        byte[] receiveData = new byte[1024];
        //发
        Socket clientSocket = new Socket("flume服务器公网IP",12345);
        DataOutputStream dos = new DataOutputStream(clientSocket.getOutputStream());
        System.out.println("像服务端发送中");
        while (true) {
            //接收数据收
            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
            serverSocket.receive(receivePacket);
            String sentence = new String(receivePacket.getData());
            //发送到flume服务器
            dos.writeUTF(sentence.toString().trim()+"\n");
        }
    }
}

接下来只需客户端端通过udp向缓存服务器发数据即可,例如Android,或者其他客户端。

 

### 如何配置 Flume 接收 NetCat 数据 为了使 Apache Flume 能够接收来自 NetCat数据,需要创建一个特定的配置文件来设置 Source、Channel 和 Sink 组件。下面是一个详细的例子说明如何完成这一过程。 #### 创建 Flume 配置文件 Flume 配置文件应当遵循一定的格式,其中至少要指定三个主要部分:source(源)、channel(通道)以及 sink(目的地)。对于通过 NetCat 发送的数据收集场景来说,可以使用 `netcat` 类型作为 source 来监听端口上的输入[^3]。 ```properties # 定义agent名称为a1 a1.sources = r1 a1.channels = c1 a1.sinks = k1 # 配置source为NetCat类型,并设定其监听地址与端口号 a1.sources.r1.type = netcat a1.sources.r1.bind = localhost a1.sources.r1.port = 44444 # 使用memory channel连接source和sink a1.channels.c1.type = memory a1.channels.c1.capacity = 1000 a1.channels.c1.transactionCapacity = 100 # 将接收到的消息打印到日志中去 a1.sinks.k1.type = logger # 关联source/channel/sink之间的关系 a1.sources.r1.channels = c1 a1.sinks.k1.channel = c1 ``` 此段配置实现了如下功能: - **Source (r1)**: 设定为 `netcat` 类型,用于监听本地主机 (`localhost`) 上的 44444 端口等待客户端发送过来的日志信息或其他文本形式的内容。 - **Channel (c1)**: 使用内存类型的 channel 存储临时消息队列;这里设定了最大容量为 1000 条记录,每笔事务处理的最大数量为 100 条。 - **Sink (k1)**: 输出方式选择了内置的日志记录器(`logger`),这意味着所有由 NetCat 输入的信息都会被记录下来并显示在控制台或日志文件里。 保存上述内容至名为 `flume-conf-netcat.conf` 文件之后,在命令行界面执行以下指令启动 Flume agent: ```bash $ bin/flume-ng agent --conf ./conf --name a1 --conf-file /path/to/flume-conf-netcat.conf ``` 这将会按照给定的配置初始化并运行名为 "a1" 的代理实例,准备接受来自任意能够访问该机器上开放端口的应用程序所发出的数据流[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值