1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  3. <modelVersion>4.0.0</modelVersion>
  4. <groupId>com.hashleaf</groupId>
  5. <artifactId>kafka</artifactId>
  6. <version>0.0.1-SNAPSHOT</version>
  7.  
  8. <dependencies>
  9. <dependency>
  10. <groupId>org.apache.kafka</groupId>
  11. <artifactId>kafka_2.9.2</artifactId>
  12. <version>0.8.2.1</version>
  13. </dependency>
  14. <dependency>
  15. <groupId>log4j</groupId>
  16. <artifactId>log4j</artifactId>
  17. <version>1.2.15</version>
  18. <exclusions>
  19. <exclusion>
  20. <artifactId>jmxtools</artifactId>
  21. <groupId>com.sun.jdmk</groupId>
  22. </exclusion>
  23. <exclusion>
  24. <artifactId>jmxri</artifactId>
  25. <groupId>com.sun.jmx</groupId>
  26. </exclusion>
  27. <exclusion>
  28. <artifactId>jms</artifactId>
  29. <groupId>javax.jms</groupId>
  30. </exclusion>
  31. <exclusion>
  32. <artifactId>mail</artifactId>
  33. <groupId>javax.mail</groupId>
  34. </exclusion>
  35. </exclusions>
  36. </dependency>
  37. <dependency>
  38. <groupId>junit</groupId>
  39. <artifactId>junit</artifactId>
  40. <version>4.11</version>
  41. <scope>test</scope>
  42. </dependency>
  43. </dependencies>
  44.  
  45. <build>
  46. <plugins>
  47. <plugin>
  48. <artifactId>maven-compiler-plugin</artifactId>
  49. <configuration>
  50. <source>1.6</source>
  51. <target>1.6</target>
  52. </configuration>
  53. </plugin>
  54. </plugins>
  55. </build>
  56. </project>
  1. package com.hashleaf.kafka;
  2.  
  3. import java.util.HashMap;
  4. import java.util.List;
  5. import java.util.Map;
  6. import java.util.Properties;
  7. import java.util.concurrent.ExecutorService;
  8. import java.util.concurrent.Executors;
  9.  
  10. import kafka.consumer.Consumer;
  11. import kafka.consumer.ConsumerConfig;
  12. import kafka.consumer.ConsumerIterator;
  13. import kafka.consumer.KafkaStream;
  14. import kafka.javaapi.consumer.ConsumerConnector;
  15. import kafka.message.MessageAndMetadata;
  16. import kafka.serializer.Decoder;
  17. import kafka.utils.VerifiableProperties;
  18.  
  19. /**
  20. * 自定义消息消费者
  21. * @author xiaojf 294825811@qq.com
  22. * @since 2015-7-15 下午11:10:28
  23. */
  24. public class MyConsumer {
  25.  
  26. private final ConsumerConnector consumer;
  27.  
  28. public MyConsumer(){
  29. Properties originalProps = new Properties();
  30.  
  31. //zookeeper 配置,通过zk 可以负载均衡的获取broker
  32. originalProps.put("zookeeper.connect", "192.168.66.2:2181,192.168.66.3:2181,192.168.66.4:2181");
  33.  
  34. //group 代表一个消费组
  35. originalProps.put("group.id", "hashleaf-group");
  36.  
  37. //zk连接超时时间
  38. originalProps.put("zookeeper.session.timeout.ms", "10000");
  39. //zk同步时间
  40. originalProps.put("zookeeper.sync.time.ms", "200");
  41. //自动提交间隔时间
  42. originalProps.put("auto.commit.interval.ms", "1000");
  43. //消息日志自动偏移量,防止宕机后数据无法读取
  44. originalProps.put("auto.offset.reset", "smallest");
  45. //序列化类
  46. originalProps.put("serializer.class", "kafka.serializer.StringEncoder");
  47.  
  48. //构建consumer connection 对象
  49. consumer = Consumer.createJavaConsumerConnector(new ConsumerConfig(originalProps));
  50. }
  51.  
  52. public void consume(){
  53. //指定需要订阅的topic
  54. Map<String ,Integer> topicCountMap = new HashMap<String, Integer>();
  55. topicCountMap.put(MyProducer.HASHLEAF_KAFKA_TOPIC, new Integer(5));
  56.  
  57. //指定key的编码格式
  58. Decoder<String> keyDecoder = new kafka.serializer.StringDecoder(new VerifiableProperties());
  59. //指定value的编码格式
  60. Decoder<String> valueDecoder = new kafka.serializer.StringDecoder(new VerifiableProperties());
  61.  
  62. //获取topic 和 接受到的stream 集合
  63. Map<String, List<KafkaStream<String, String>>> map = consumer.createMessageStreams(topicCountMap, keyDecoder, valueDecoder);
  64.  
  65. //根据指定的topic 获取 stream 集合
  66. List<KafkaStream<String, String>> kafkaStreams = map.get(MyProducer.HASHLEAF_KAFKA_TOPIC);
  67.  
  68. ExecutorService executor = Executors.newFixedThreadPool(4);
  69.  
  70. //因为是多个 message组成 message set , 所以要对stream 进行拆解遍历
  71. for(final KafkaStream<String, String> kafkaStream : kafkaStreams){
  72.  
  73. executor.submit(new Runnable() {
  74.  
  75. @Override
  76. public void run() {
  77. //拆解每个的 stream
  78. ConsumerIterator<String, String> iterator = kafkaStream.iterator();
  79.  
  80. while (iterator.hasNext()) {
  81.  
  82. //messageAndMetadata 包括了 message , topic , partition等metadata信息
  83. MessageAndMetadata<String, String> messageAndMetadata = iterator.next();
  84.  
  85. System.out.println("message : " + messageAndMetadata.message() + " partition : " + messageAndMetadata.partition());
  86.  
  87. }
  88. }
  89. });
  90.  
  91. }
  92. }
  93.  
  94. public static void main(String[] args) {
  95. new MyConsumer().consume();
  96. }
  97.  
  98. }

kafka 0.8.2 消息消费者 consumer的更多相关文章

  1. kafka 0.10.2 消息消费者

    package cn.xiaojf.kafka.consumer; import org.apache.kafka.clients.consumer.ConsumerConfig; import or ...

  2. kafka 0.8.2 消息生产者 KafkaProducer

    package com.hashleaf.kafka; import java.util.Properties; import java.util.concurrent.ExecutorService ...

  3. kafka 0.8.2 消息生产者 producer

    package com.hashleaf.kafka; import java.util.Properties; import kafka.javaapi.producer.Producer; imp ...

  4. kafka 0.10.2 消息生产者(producer)

    package cn.xiaojf.kafka.producer; import org.apache.kafka.clients.producer.*; import org.apache.kafk ...

  5. kafka 0.10.2 消息生产者

    package cn.xiaojf.kafka.producer; import org.apache.kafka.clients.producer.KafkaProducer; import org ...

  6. 【原创】Kafka 0.11消息设计

    Kafka 0.11版本增加了很多新功能,包括支持事务.精确一次处理语义和幂等producer等,而实现这些新功能的前提就是要提供支持这些功能的新版本消息格式,同时也要维护与老版本的兼容性.本文将详细 ...

  7. Kafka设计解析(十六)Kafka 0.11消息设计

    转载自 huxihx,原文链接 [原创]Kafka 0.11消息设计 目录 一.Kafka消息层次设计 1. v1格式 2. v2格式 二.v1消息格式 三.v2消息格式 四.测试对比 Kafka 0 ...

  8. Kafka 0.10问题点滴

    15.如何消费内部topic: __consumer_offsets 主要是要让它来格式化:GroupMetadataManager.OffsetsMessageFormatter 最后用看了它的源码 ...

  9. Apache Kafka 0.9消费者客户端

    当Kafka最初创建时,它与Scala生产者和消费者客户端一起运送.随着时间的推移,我们开始意识到这些API的许多限制.例如,我们有一个“高级”消费者API,它支持消费者组并处理故障转移,但不支持许多 ...

随机推荐

  1. Doctype 文档类型,标准模式,混杂模式

    HTML4.01和XHTML1.0 基于 SGML,支持DTD声明,HTML5不是,但是需要 doctype 来规范浏览器的行为. 标准模式是指,DTD声明定义了标准文档的类型后,浏览器按W3C标准解 ...

  2. 基于 Haproxy 构建负载均衡集群

    1.HAPROXY简介 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种负载均衡解决方案.HAProxy特别适用于那些负载特大的web ...

  3. Android系统--输入系统(八)Reader线程_使用EventHub读取事件

    Android系统--输入系统(八)Reader线程_使用EventHub读取事件 1. Reader线程工作流程 获得事件 size_t count = mEventHub->getEvent ...

  4. C语言结构体中字符数组的问题

    第一个程序 #include <stdio.h> #include <string.h> typedef struct student { char name[10]; int ...

  5. hdu1512 Monkey King

    Problem Description Once in a forest, there lived N aggressive monkeys. At the beginning, they each ...

  6. 如何使用python生成xml

    最近要用python生成一个xml格式的文件.因为有一些内容是中文,原来的xml文件中使用了CDATA 的部分. 而之前的python程序所用的库中没有 创建这个区域的方法.无奈研究了大半天. 最后用 ...

  7. 详解Session分布式共享(.NET CORE版)

    一.前言&回顾 在上篇文章Session分布式共享 = Session + Redis + Nginx中,好多同学留言问了我好多问题,其中印象深刻的有:nginx挂了怎么办?采用Redis的S ...

  8. 前端模块化——seaJS

    1.seaJS手记 一:Bower获取 要安装bower Npm install -g bower Bower install seajs 二:Use方法是整个项目的入口方法,通常一个项目中只调用一次 ...

  9. OC类的介绍

    类的本质 类的本质其实也是一个对象(类对象) 类对象 类对象再程序运行时一直存在 类对象是一种数据结构,存储类的基本信息:类大小,类名称,类的版本以及消息与函数的映射表等 类对象所保存的信息在程序编译 ...

  10. 【Netty】Netty核心组件介绍

    一.前言 前篇博文体验了Netty的第一个示例,下面接着学习Netty的组件和其设计. 二.核心组件 2.1. Channel.EventLoop和ChannelFuture Netty中的核心组件包 ...