一、

1、生产者 产生数据

  1. package kafakaTohbase;
  2.  
  3. import java.util.Properties;
  4.  
  5. import kafka.javaapi.producer.Producer;
  6. import kafka.producer.KeyedMessage;
  7. import kafka.producer.ProducerConfig;
  8.  
  9. public class KafkaProducer {
  10.  
  11. public static void main(String[] args) {
  12. Properties props = new Properties();
  13. props.put("zk.connect", KafkaProperties.zkConnect);
  14. props.put("serializer.class", "kafka.serializer.StringEncoder");
  15. props.put("metadata.broker.list", "hdjt01:9092,hdjt02:9092,hdjt03:9092");
  16. ProducerConfig config = new ProducerConfig(props);
  17. Producer<String, String> producer = new Producer<String, String>(config);
  18. for (int i = 0; i < 10; i++){
  19. producer.send(new KeyedMessage<String, String>("test5", "liu" + i));
  20. }
  21. }
  22.  
  23. }

  注: props.put("serializer.class", "kafka.serializer.StringEncoder")  发送的数据是String,

还可以是 二进制数组形式:

props.put("serializer.class", "kafka.serializer.DefaultEncoder");
props.put("key.serializer.class", "kafka.serializer.StringEncoder");  如果没有这个,就代表 key也是二进制形式。

生产者发送的都是keyvalue对

2、消费者

  1. package kafakaTohbase;
  2.  
  3. import java.io.IOException;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import java.util.Properties;
  8.  
  9. import kafka.consumer.ConsumerConfig;
  10. import kafka.consumer.ConsumerIterator;
  11. import kafka.consumer.KafkaStream;
  12. import kafka.javaapi.consumer.ConsumerConnector;
  13. import kafka.javaapi.producer.Producer;
  14. import kafka.producer.KeyedMessage;
  15. import kafka.producer.ProducerConfig;
  16.  
  17. public class KafkaConsumer extends Thread{
  18.  
  19. private final ConsumerConnector consumer;
  20. private final String topic;
  21.  
  22. public KafkaConsumer(String topic) {
  23. consumer = kafka.consumer.Consumer
  24. .createJavaConsumerConnector(createConsumerConfig());
  25. this.topic = topic;
  26. }
  27.  
  28. private static ConsumerConfig createConsumerConfig() {
  29. Properties props = new Properties();
  30. props.put("zookeeper.connect", KafkaProperties.zkConnect);
  31. props.put("group.id", KafkaProperties.groupId1);
  32. props.put("zookeeper.session.timeout.ms", "40000"); //zookeeper 与 region server 的链接超时时间
  33. props.put("zookeeper.sync.time.ms", "200");
  34. props.put("auto.commit.interval.ms", "1000");
    //props.put("auto.offset.reset", "smallest");//可以读取旧数据,默认不读取
  35. return new ConsumerConfig(props);
  36. }
  37.  
  38. @Override
  39. public void run() {
  40.  
  41. Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
  42. topicCountMap.put(topic, new Integer(1));
  43. Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = consumer
  44. .createMessageStreams(topicCountMap);
  45. KafkaStream<byte[], byte[]> stream = consumerMap.get(topic).get(0);
  46. ConsumerIterator<byte[], byte[]> it = stream.iterator();
  47. HBaseUtils hbase = new HBaseUtils();
  48. while (it.hasNext()) { //相当于加了一把锁,一直返回true
  49. // System.out.println("3receive:" + it.next().message());
  50. try {
  51. System.out.println("11111");
  52. hbase.put(new String(it.next().message()));
  53. } catch (IOException e) {
  54. // TODO Auto-generated catch block
  55. e.printStackTrace();
  56. }
  57.  
  58. // try {
  59. // sleep(300); // 每条消息延迟300ms
  60. // } catch (InterruptedException e) {
  61. // e.printStackTrace();
  62. // }
  63. }
  64. }
  65.  
  66. }

  连接hbase,配置信息

  1. package kafakaTohbase;
  2.  
  3. import java.io.IOException;
  4. import java.util.Random;
  5.  
  6. import org.apache.hadoop.conf.Configuration;
  7. import org.apache.hadoop.hbase.HBaseConfiguration;
  8. import org.apache.hadoop.hbase.client.HTable;
  9. import org.apache.hadoop.hbase.client.Put;
  10. import org.apache.hadoop.hbase.util.Bytes;
  11.  
  12. public class HBaseUtils {
  13. public void put(String string) throws IOException {
  14. //设置HBase据库的连接配置参数
  15. Configuration conf = HBaseConfiguration.create();
  16. conf.set("hbase.zookeeper.quorum", "hdjt01:2181,hdjt02:2181,hdjt03:2181"); // Zookeeper的地址
  17. // conf.set("hbase.zookeeper.property.clientPort", "42182");
  18. Random random = new Random();
  19. long a = random.nextInt(1000000000);
  20. String tableName = "emp";
  21. String rowkey = "rowkey"+a ;
  22. String columnFamily = "basicinfo";
  23. String column = "empname";
  24. //String value = string;
  25. HTable table=new HTable(conf, tableName);
  26. Put put=new Put(Bytes.toBytes(rowkey));
  27. put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column), Bytes.toBytes(string));
  28. table.put(put);//放入表
  29. System.out.println("放入成功");
  30. table.close();//释放资源
  31. }
  32. }

  测试消费者:

  1. public class Kafkaceshi {
  2.  
  3. public static void main(String[] args) {
  4. // KafkaProducer a=new KafkaProducer ();
  5. // a.producer();
  6. KafkaConsumer consumerThread = new KafkaConsumer(KafkaProperties.topic);
  7. consumerThread.run();
  8.  
  9. }
  10.  
  11. }

  

  1.  

Kafka 接受数据并消费到hbase数据库的更多相关文章

  1. kafka丢失和重复消费数据

    Kafka作为当下流行的高并发消息中间件,大量用于数据采集,实时处理等场景,我们在享受他的高并发,高可靠时,还是不得不面对可能存在的问题,最常见的就是丢包,重发问题. 1.丢包问题:消息推送服务,每天 ...

  2. SparkStreaming消费kafka中数据的方式

    有两种:Direct直连方式.Receiver方式 1.Receiver方式: 使用kafka高层次的consumer API来实现,receiver从kafka中获取的数据都保存在spark exc ...

  3. ambari 修改kafka日志目录后,写入数据无法消费

    ## 起因:ambari 修改kafka日志目录后,写入数据无法消费 - 使用下面的客户端消费命令可以消费到数据 ./kafka-console-consumer.sh --zookeeper 192 ...

  4. 【HBase】通过Java代码实现HBase数据库中数据的增删改查

    目录 创建maven工程,导入jar包 java代码实现创建hbase表 java代码实现向hbase表中插入数据 java代码查询hbase数据 使用rowKey查询指定列族指定列的值 通过star ...

  5. 【原创】开发Kafka通用数据平台中间件

    开发Kafka通用数据平台中间件 (含本次项目全部代码及资源) 目录: 一. Kafka概述 二. Kafka启动命令 三.我们为什么使用Kafka 四. Kafka数据平台中间件设计及代码解析 五. ...

  6. Kafka权威指南 读书笔记之(四)Kafka 消费者一一从 Kafka读取数据

    KafkaConsumer概念 消费者和消费者群组 Kafka 消费者从属于消费者群组.一个群组里的消费者订阅的是同一个主题,每个消费者接收主题一部分分区的消息. 往群组里增加消费者是横向伸缩消费能力 ...

  7. 【Kafka】《Kafka权威指南》——从Kafka读取数据

    应用程序使用 KafkaConsumer向 Kafka 订阅主题,并从订阅的主题上接收消息 . 从 Kafka 读取数据不同于从其他悄息系统读取数据,它涉及一些独特的概念和想法.如果不先理解 这些概念 ...

  8. Kafka 是如何管理消费位点的?

    Kafka 是一个高度可扩展的分布式消息系统,在实时事件流和流式处理为中心的架构越来越风靡的今天,它扮演了这个架构中核心存储的角色.从某种角度说,Kafka 可以看成实时版的 Hadoop 系统.Ha ...

  9. Hbase数据库

        1.简介 HBase从诞生至今将近10年,在apache基金会的孵化下,已经变成一个非常成熟的项目,也有许多不同的公司支持着许多不同的分支版本,如cloudra等等. HBase不同于一般的关 ...

随机推荐

  1. HDFS handler

    http://docs.oracle.com/goldengate/bd1221/gg-bd/GADBD/GUID-85A82B2E-CD51-463A-8674-3D686C3C0EC0.htm#G ...

  2. java内存结构JVM——java内存模型JMM——java对象模型JOM

    JVM内存结构 Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途.其中有些区域随着虚拟机进程的启动而存在,而有些区 ...

  3. Nginx是如何配置为 Web 服务器的【转载】

    详解 Nginx是如何配置为 Web 服务器的 林涛 发表于:2016-11-29 23:23 分类:WebServer 标签:Nginx,web,web服务器 521次 抽象来说,将 Nginx 配 ...

  4. 第九次作业psp

    psp 进度条 代码累积折线图 博文累积折线图 psp饼状图

  5. java程序设计第二次实验报告

    北京电子科技学院(BESTI) 实验报告 课程:数据结构    班级:1352    姓名:何伟钦     学号:20135223 成绩:            指导教师:娄嘉鹏      实验日期: ...

  6. Internet History, Technology and Security (Week3)

    Week3. Welcome to week 3! This is our fourth and final week of History where we make the connection ...

  7. 守护线程(Daemon Thread)

    在Java中有两类线程:用户线程 (User Thread).守护线程 (Daemon Thread). 所谓守护 线程,是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称 ...

  8. testng对执行失败的用例,再次执行

    前段时间在网络上看到通过重写TestNG的接口,可以再次执行失败的测试用例,于是学习了,我之前的做法是当自己的脚本中碰到异常,就自动调用方法本身来达到再次执行用例的目的,这个过程中有设定重试的次数 对 ...

  9. pygame入门

    pygame入门 说明 在学习pygame时,主要参考了目光博客的教程.目光博客 原教程是2011年写的,年代比较久远了,使用Python2.我学习时使用python3将代码重新实现了一遍,同时补充了 ...

  10. VMIC

    1. wmic 的简介 wmic -? [全局开关] <命令> 可以使用以下全局开关: /NAMESPACE 别名在其上操作的命名空间的路径. /ROLE 包含别名定义的角色的路径. /N ...