Kafka 学习笔记(八)之producer读取file

来源:互联网 发布:c语言好学不 编辑:程序博客网 时间:2024/05/21 13:27

要想让Kafka用到实际中,就需要学会让Kafka从文件中读取内容,发送到topic里,以供consumer读取。我们以前的几篇,自己产生data的,不是从file中读的。
之前先下载好scp,scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令。命令如下:

yum install openssh-clients
从远程server上下载了文件到本地,下载命令:
$scp root@10.6.159.147:/opt/soft/demo.tar /opt/soft/

然后在producer文件里加入读取file的代码,我在前面的SimpleCounter代码基础上加了read file,酱紫方便,主要是我懒。。。

直接贴代码了,从上次的SimpleCounter改的,加入了读取file功能。


package com.shapira.examples.producer.simplecounter;import java.util.concurrent.ExecutionException;import java.io.File;import java.io.InputStreamReader;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileWriter;public class SimpleCounter {private static DemoProducer producer;public static void main(String[] args) throws InterruptedException, ExecutionException {if (args.length == 0) {System.out.println("SimpleCounterOldProducer {broker-list} {topic} {type old/new} {type sync/async} {delay (ms)} {count}");return;}/* get arguments */String brokerList = args[0];String topic = args[1];String age = args[2];String sync = args[3];int delay = Integer.parseInt(args[4]);int count = Integer.parseInt(args[5]);if (age.equals("old"))producer = new DemoProducerOld(topic);else if (age.equals("new"))producer = new DemoProducerNewJava(topic);elseSystem.out.println("Third argument should be old or new, got " + age);/* start a producer */producer.configure(brokerList, sync);producer.start();long startTime = System.currentTimeMillis();System.out.println("Starting...");producer.produce("Starting...");/* produce the numbersfor (int i=0; i < count; i++ ) {producer.produce(Integer.toString(i));Thread.sleep(delay);}*//*read message from file*/try { String pathname = "/root/kafka/datasrc/interfacei.traffic";File filename = new File(pathname); InputStreamReader reader = new InputStreamReader(new FileInputStream(filename)); BufferedReader br = new BufferedReader(reader); String line = "";line = br.readLine();while (line != null) {line = br.readLine(); System.out.println(line);producer.produce(line);}} catch (Exception e) {e.printStackTrace();}long endTime = System.currentTimeMillis();System.out.println("... and we are done. This took " + (endTime - startTime) + " ms.");producer.produce("... and we are done. This took " + (endTime - startTime) + " ms.");/* close shop and leave */producer.close();System.exit(0);}



编译步骤还和以前一样,maven install,然后运行。
下一步研究如何从一个server produce 消息,传到另一个server。这意味着我要在配置一个虚拟机,重新在产生traffic的机子上再装一套软件。。。
0 0