碰到的问题

  (1)线程操作问题,因为单机节点,代码加锁就好了,后续再写

  (2) 消费者写hdfs的时候以流的形式写入,但是什么时候关闭流就是一个大问题了,这里引入了   fsDataOutputStream.hsync();

  1. hsync 保证 hdfs在写数据的时候被新的reader读到,保证数据被datanode持久化

生产者

  1. package com.xuliugen.kafka.demo;
  2.  
  3. import org.apache.kafka.clients.producer.KafkaProducer;
  4. import org.apache.kafka.clients.producer.ProducerRecord;
  5.  
  6. import java.util.Properties;
  7.  
  8. public class ProducerDemo {
  9.  
  10. // Topic
  11. private static final String topic = "tangsonghuai";
  12.  
  13. public static void main(String[] args) throws Exception {
  14.  
  15. Properties props = new Properties();
  16. props.put("bootstrap.servers", "192.168.15.140:9092");
  17. props.put("acks", "0");
  18. props.put("group.id", "1111");
  19. props.put("retries", "0");
  20. props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
  21. props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
  22.  
  23. //生产者实例
  24. KafkaProducer producer = new KafkaProducer(props);
  25.  
  26. int i = 1;
  27.  
  28. // 发送业务消息
  29. // 读取文件 读取内存数据库 读socket端口
  30. while (i<50) {
  31. Thread.sleep(100);
  32. producer.send(new ProducerRecord<String, String>(topic, "key:" + i, "value:" + i));
  33. System.out.println("key:" + i + " " + "value:" + i);
  34. i++;
  35. }
  36. }
  37. }

消费者

  1. package com.xuliugen.kafka.demo;
  2.  
  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.fs.FSDataOutputStream;
  5. import org.apache.hadoop.fs.FileSystem;
  6. import org.apache.hadoop.fs.Path;
  7. import org.apache.hadoop.io.IOUtils;
  8. import org.apache.kafka.clients.consumer.ConsumerRecord;
  9. import org.apache.kafka.clients.consumer.ConsumerRecords;
  10. import org.apache.kafka.clients.consumer.KafkaConsumer;
  11. import org.slf4j.Logger;
  12. import org.slf4j.LoggerFactory;
  13.  
  14. import java.io.ByteArrayInputStream;
  15. import java.io.IOException;
  16. import java.net.URI;
  17. import java.util.*;
  18.  
  19. public class ConsumerDemo {
  20. private static final Logger logger = LoggerFactory.getLogger(ConsumerDemo.class);
  21. private static final String topic = "tangsonghuai";
  22.  
  23. public static void main(String[] args) throws IOException {
  24.  
  25. Properties props = new Properties();
  26. props.put("bootstrap.servers", "192.168.15.140:9092");
  27. props.put("group.id", "1111");
  28. props.put("enable.auto.commit", "true");
  29. props.put("auto.commit.interval.ms", "1000");
  30. props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
  31. props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
  32.  
  33. KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(props);
  34.  
  35. consumer.subscribe(Arrays.asList(topic));
  36. int i = 0;
  37. String uri = "hdfs://192.168.15.140:9000/";
  38. Configuration configuration = new Configuration();
  39. configuration.set("dfs.client.block.write.replace-datanode-on-failure.policy", "NEVER");
  40.  
  41. FileSystem fs = FileSystem.get(URI.create(uri), configuration);
  42. final String pathString = "/d1/tangsonghuai";
  43. final FSDataOutputStream fsDataOutputStream = fs.append(new Path(pathString));
  44. while (true) {
  45. ConsumerRecords<String, String> records = consumer.poll(1000);
  46. for (ConsumerRecord<String, String> record : records) {
  47. System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
  48. // HashMap<String, String> hmap= new HashMap<String, String>();
  49. // hmap.put(record.key(),record.value());
  50.  
  51. fsDataOutputStream.write((record.offset()+","+record.key() + "," + record.value()+"\n").getBytes());
  52. fsDataOutputStream.hsync();
  53. i++;
  54. if (i == 70) {
  55. fsDataOutputStream.close();
  56. consumer.close();
  57. }
  58.  
  59. // IOUtils.copyBytes(new ByteArrayInputStream(record.value().getBytes()),
  60. // fsDataOutputStream,configuration, true);
  61. }
  62. }
  63.  
  64. }
  65. }

pom.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6.  
  7. <groupId>com.xuliugen.kafka</groupId>
  8. <artifactId>kafka.demo</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10.  
  11. <dependencies>
  12. <dependency>
  13. <groupId>org.apache.kafka</groupId>
  14. <artifactId>kafka-clients</artifactId>
  15. <version>2.0.0</version>
  16. </dependency>
  17.  
  18. <dependency>
  19. <groupId>org.slf4j</groupId>
  20. <artifactId>slf4j-log4j12</artifactId>
  21. <version>1.7.12</version>
  22. </dependency>
  23. <dependency>
  24. <groupId>org.slf4j</groupId>
  25. <artifactId>slf4j-api</artifactId>
  26. <version>1.7.12</version>
  27. </dependency>
  28.  
  29. <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
  30. <dependency>
  31. <groupId>org.apache.hadoop</groupId>
  32. <artifactId>hadoop-common</artifactId>
  33. <version>2.8.5</version>
  34. </dependency>
  35.  
  36. <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
  37. <dependency>
  38. <groupId>org.apache.hadoop</groupId>
  39. <artifactId>hadoop-hdfs</artifactId>
  40. <version>2.8.5</version>
  41. </dependency>
  42.  
  43. </dependencies>
  44.  
  45. </project>

kafka写入hdfs的更多相关文章

  1. Mysql增量写入Hdfs(一) --将Mysql数据写入Kafka Topic

    一. 概述 在大数据的静态数据处理中,目前普遍采用的是用Spark+Hdfs(Hive/Hbase)的技术架构来对数据进行处理. 但有时候有其他的需求,需要从其他不同数据源不间断得采集数据,然后存储到 ...

  2. Logstash读取Kafka数据写入HDFS详解

    强大的功能,丰富的插件,让logstash在数据处理的行列中出类拔萃 通常日志数据除了要入ES提供实时展示和简单统计外,还需要写入大数据集群来提供更为深入的逻辑处理,前边几篇ELK的文章介绍过利用lo ...

  3. spark读取 kafka nginx网站日志消息 并写入HDFS中(转)

    原文链接:spark读取 kafka nginx网站日志消息 并写入HDFS中 spark 版本为1.0 kafka 版本为0.8 首先来看看kafka的架构图 详细了解请参考官方 我这边有三台机器用 ...

  4. flink---实时项目--day02-----1. 解析参数工具类 2. Flink工具类封装 3. 日志采集架构图 4. 测流输出 5. 将kafka中数据写入HDFS 6 KafkaProducer的使用 7 练习

    1. 解析参数工具类(ParameterTool) 该类提供了从不同数据源读取和解析程序参数的简单实用方法,其解析args时,只能支持单只参数. 用来解析main方法传入参数的工具类 public c ...

  5. Kafka到Hdfs的数据Pipeline整理

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 找时间总结整理了下数据从Kafka到Hdfs的一些pipeline,如下 1> Kafka ...

  6. Kafka+Storm+HDFS整合实践

    在基于Hadoop平台的很多应用场景中,我们需要对数据进行离线和实时分析,离线分析可以很容易地借助于Hive来实现统计分析,但是对于实时的需求Hive就不合适了.实时应用场景可以使用Storm,它是一 ...

  7. [转载] Kafka+Storm+HDFS整合实践

    转载自http://www.tuicool.com/articles/NzyqAn 在基于Hadoop平台的很多应用场景中,我们需要对数据进行离线和实时分析,离线分析可以很容易地借助于Hive来实现统 ...

  8. Mysql增量写入Hdfs(二) --Storm+hdfs的流式处理

    一. 概述 上一篇我们介绍了如何将数据从mysql抛到kafka,这次我们就专注于利用storm将数据写入到hdfs的过程,由于storm写入hdfs的可定制东西有些多,我们先不从kafka读取,而先 ...

  9. Kafka Connect HDFS

    概述 Kafka 的数据如何传输到HDFS?如果仔细思考,会发现这个问题并不简单. 不妨先想一下这两个问题? 1)为什么要将Kafka的数据传输到HDFS上? 2)为什么不直接写HDFS而要通过Kaf ...

随机推荐

  1. Exp1 PC平台逆向破解

    本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返 ...

  2. Java使用AES算法进行加密解密

    一.加密 /** * 加密 * @param src 源数据字节数组 * @param key 密钥字节数组 * @return 加密后的字节数组 */ public static byte[] En ...

  3. JGUI源码:JS菜单动态绑定(8)

    我们知道Jquery绑定事件后的新添加的对象是不响应事件的,为了解决这个问题,动态添加的对象需要从新绑定,使用一个init方法实现代码如下 //Accordion封装 (function($) { J ...

  4. hibernate自定义校验Valid

    步骤: 1.定义注解: import javax.validation.Constraint; import javax.validation.Payload; import java.lang.an ...

  5. [C++] const与指针的关系

    首先快速复习一些基础. 考虑下面的声明兼定义式: int p = 10; p的基础数据类型是int. 考虑下面的声明兼定义式: const int a = 10; a的基础数据类型是int,a是一个常 ...

  6. #1 macos和windows下对多Python环境配置的记录

    为啥会发现环节配置的问题 因为scrapy的setting前期走弯路的时候,碰到了修改了Windows下的Python中的scrapy的默认setting,但是我电脑上还有anaconda,而且我是使 ...

  7. DOS:第二天

    今天介绍 dir ------------ dir (directory,目录)是一个条列档案及目录的命令行界面指令,在CP/M.VMS.DOS.OS/2.Singularity及Microsoft ...

  8. 【实验四】[bx]和loop的使用

    四.实验结论 任务一: (1) ①当我写 mov ax,b800h时,编译报错了. ②清屏后运行 (2)将源代码程序中字数据0403H→修改为0441H,再次运行,图案发生了变化. 任务二: (1) ...

  9. mysql字符集设置注意事项

    mysql字符集设置必须是在具体的某一个数据库情况下才能进行设置 否则会报错.

  10. 小程序git发布

    微信小程序提交项目: 1.码云上创建一个项目 xiaochengxu 2.本地创建一个文件夹,然后在控制台使用 cd 文件夹名字 (将文件拉到控制台) 3.使用 git init 命令 ,初始化一个g ...