kafka是吞吐量巨大的一个消息系统,它是用scala写的,和普通的消息的生产消费还有所不同,写了个demo程序供大家参考。kafka的安装请参考官方文档。

首先我们需要新建一个maven项目,然后在pom中引用kafka jar包,引用依赖如下:


  1. <dependency>
  2. <groupId>org.apache.kafka</groupId>
  3. <artifactId>kafka_2.11</artifactId>
  4. <version>0.8.2.1</version>
  5. </dependency>

我们用的版本是0.8, 下面我们看下生产消息的代码:


  1. package com.telewave.kafka.util;
  2. import java.util.Properties;
  3. import kafka.javaapi.producer.Producer;
  4. import kafka.producer.KeyedMessage;
  5. import kafka.producer.ProducerConfig;
  6. /**
  7. *
  8. * Hello world!
  9. *
  10. *
  11. */
  12. public class KafkaProducer
  13. {
  14. private final Producer<String, String> producer;
  15. public final static String TOPIC = "TestTopic";
  16. private KafkaProducer() {
  17. Properties props = new Properties();
  18. // 此处配置的是kafka的端口
  19. props.put("metadata.broker.list", "192.168.168.200:9092");
  20. // 配置value的序列化类
  21. props.put("serializer.class", "kafka.serializer.StringEncoder");
  22. // 配置key的序列化类
  23. props.put("key.serializer.class", "kafka.serializer.StringEncoder");
  24. // request.required.acks
  25. // 0, which means that the producer never waits for an acknowledgement
  26. // from the broker (the same behavior as 0.7). This option provides the
  27. // lowest latency but the weakest durability guarantees (some data will
  28. // be lost when a server fails).
  29. // 1, which means that the producer gets an acknowledgement after the
  30. // leader replica has received the data. This option provides better
  31. // durability as the client waits until the server acknowledges the
  32. // request as successful (only messages that were written to the
  33. // now-dead leader but not yet replicated will be lost).
  34. // -1, which means that the producer gets an acknowledgement after all
  35. // in-sync replicas have received the data. This option provides the
  36. // best durability, we guarantee that no messages will be lost as long
  37. // as at least one in sync replica remains.
  38. props.put("request.required.acks", "-1");
  39. producer = new Producer<String, String>(new ProducerConfig(props));
  40. }
  41. void produce() {
  42. int messageNo = 1000;
  43. final int COUNT = 10000;
  44. while (messageNo < COUNT) {
  45. String key = String.valueOf(messageNo);
  46. String data = "hello kafka message " + key;
  47. producer.send(new KeyedMessage<String, String>(TOPIC, key, data));
  48. System.out.println(data);
  49. messageNo++;
  50. }
  51. }
  52. public static void main(String[] args)
  53. {
  54. new KafkaProducer().produce();
  55. }
  56. }

下面是消费端的代码实现:


  1. package com.telewave.kafka.util;
  2. import java.util.HashMap;
  3. import java.util.List;
  4. import java.util.Map;
  5. import java.util.Properties;
  6. import org.apache.kafka.clients.producer.KafkaProducer;
  7. import kafka.consumer.ConsumerConfig;
  8. import kafka.consumer.ConsumerIterator;
  9. import kafka.consumer.KafkaStream;
  10. import kafka.javaapi.consumer.ConsumerConnector;
  11. import kafka.serializer.StringDecoder;
  12. import kafka.utils.VerifiableProperties;
  13. public class KafkaConsumer {
  14. private final ConsumerConnector consumer;
  15. public KafkaConsumer() {
  16. Properties props = new Properties();
  17. // zookeeper 配置
  18. props.put("zookeeper.connect", "192.168.168.200:2181");
  19. // group 代表一个消费组
  20. props.put("group.id", "jd-group");
  21. // zk连接超时
  22. props.put("zookeeper.session.timeout.ms", "4000");
  23. props.put("zookeeper.sync.time.ms", "200");
  24. props.put("auto.commit.interval.ms", "1000");
  25. props.put("auto.offset.reset", "largest");
  26. // 序列化类
  27. props.put("serializer.class", "kafka.serializer.StringEncoder");
  28. ConsumerConfig config = new ConsumerConfig(props);
  29. consumer = kafka.consumer.Consumer.createJavaConsumerConnector(config);
  30. }
  31. public void consume() {
  32. Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
  33. topicCountMap.put("TestTopic", new Integer(1));
  34. StringDecoder keyDecoder = new StringDecoder(new VerifiableProperties());
  35. StringDecoder valueDecoder = new StringDecoder(
  36. new VerifiableProperties());
  37. Map<String, List<KafkaStream<String, String>>> consumerMap =
  38. consumer.createMessageStreams(topicCountMap, keyDecoder, valueDecoder);
  39. KafkaStream<String, String> stream = consumerMap.get(
  40. "TestTopic").get(0);
  41. ConsumerIterator<String, String> it = stream.iterator();
  42. while (it.hasNext())
  43. System.out.println(it.next().message());
  44. }
  45. public static void main(String[] args) {
  46. new KafkaConsumer().consume();
  47. }
  48. }

kafka_2.11-0.8.2.1+java 生产消费程序demo示例的更多相关文章

  1. kafka之三:kafka java 生产消费程序demo示例

    kafka是吞吐量巨大的一个消息系统,它是用scala写的,和普通的消息的生产消费还有所不同,写了个demo程序供大家参考.kafka的安装请参考官方文档. 首先我们需要新建一个maven项目,然后在 ...

  2. 试驾 Citus 11.0 beta

    https://www.citusdata.com/blog/2022/03/26/test-drive-citus-11-beta-for-postgres/ Citus 11.0 beta 的最大 ...

  3. java10.0.2和java 11.0.1配置环境变量

    java10.0.2 在网上找了各种方法一直也没配好打开jak下的lib文件夹发现并没有tools.jar,后经查询jdk-9后就没有了上述.jar文件所以我的配置方法如下 ClASSPATH C:\ ...

  4. java编程如何实现多条2017-01-16 22:28:11.0这样的时间数据,转换成Date类型Mon Jan 16 22:28:11 CST 2017这样的时间数据

    不多说,直接上干货! package zhouls.bigdata.DataFeatureSelection.sim; import java.text.ParseException; import ...

  5. JDBC中 mysql数据库的连接工具类 Java登录 及增删改查 整理 附带:Navicat Premium 11.0.12中文破解版.zip(下载)mysql数据库工具

    先写一个工具类,有实现MySQL数据库连接的方法,和关闭数据库连接.关闭ResultSet  结果集.关闭PreparedStatement 的方法.代码如下: package com.swift; ...

  6. kafka_2.11-2.0.0_安装部署

    参考博文:kafka 配置文件参数详解 参考博文:Kafka[第一篇]Kafka集群搭建 参考博文:如何为Kafka集群选择合适的Partitions数量 参考博文:Kafka Server.prop ...

  7. CM5(5.11.0)和CDH5(5.11.0)离线安装

    概述 文件下载 系统环境搭建 日志查看 Q&A 参考 概述 CDH (Cloudera's Distribution, including Apache Hadoop),是Hadoop众多分支 ...

  8. Kafka生产消费API JAVA实现

    Maven依赖: <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka- ...

  9. RemotelyAnywhere 11.0.2716 SERVER EDITION 绿色破解安装版

    RemotelyAnywhere是一个小巧的,利用浏览器进行远程控制的小程序.只要在服务器端安装该软件,然后你就可以通过任何一个支持 Java 的浏览器对远程计算机进行控制了.通过它,你可以管理远程计 ...

随机推荐

  1. python 时间戳转换格式

    1.简介 在编写代码时,往往涉及时间.日期.时间戳的相互转换. 2.示例 # 引入模块 import time, datetime 2.1 str类型的日期转换为时间戳 1 # 字符类型的时间 2 t ...

  2. 2019-04-04-day026-模块和包的导入

    课前 估分 重新做题 思考为什么 积累问题 提前了解你的情况 40分以下 选课系统 按照反射那个版本 把反射的逻辑看明白 接着把逻辑填完整 用上pickle logging写日志 进阶 : 用软件开发 ...

  3. python day12 ——1.生成器2.生成器表达式 3.列表推导式

    一.生成器 什么是生成器. 生成器实质就是迭代器. 在python中有三种方式来获取生成器: 1. 通过生成器函数. 2. 通过各种推导式来实现生成器 . 3. 通过数据的转换也可以获取生成器. 1. ...

  4. Python基础6--函数、类和文件操作

    1 def name(para) def myabs(x): if x>0: return x else: return -x 2 lambda表达式 用于声明匿名函数,既没有名字的小函数 f ...

  5. 【Python】unittest-3

    一.@unittest.skip("skipping this case") # 无条件忽略该测试方法 二.@unittest.skipIf(a > 5, "con ...

  6. LINUX7安装Oracle11g单实例小结

    LINUX7安装Oracle11g遇到问题如下,记录 添加组: groupadd -g 1000 oinstall #报错:提示组被占用 #useradd: group 'oinstall' does ...

  7. Django之模型层-多表操作

    多表操作 数据库表关系 一对多:两个表之间的关系一旦确定为一对多,必须在数据多的表中创建关联字段 多对多:两个表之间的关系一定确定为多对多,必须创建第三张表(关联表) 一对一:一旦两个表之间的关系确定 ...

  8. [opencvjichu]cv::Mat::type() 返回值

    opencv opencv中Mat存在各种类型,其中mat有一个type()的函数可以返回该Mat的类型.类型表示了矩阵中元素的类型以及矩阵的通道个数,它是一系列的预定义的常量,其命名规则为CV_(位 ...

  9. Pycharm出现Segmentation fault...(interrupted by signal 11: SIGSEGV)的解决方法

    众所周知,用pycharm远程服务器debug代码已经成为学习深度学习相关代码的有力工具,但是最近创建了一个虚拟环境,进行debug的时候,莫名会出现下面这个错误,看的我都抽风了 bash: line ...

  10. 卸载Mariadb-报错

    1. rpm -qa|grep aria MariaDB-client-10.1.22-1.x86_64MariaDB-devel-10.1.22-1.x86_64MariaDB-shared-10. ...