上一节,我们实现了搭建kafka集群。本节我们将从0开始,使用Java,搭建kafka客户端生产消费模型。

1.创建maven项目2.kafka producer3.kafka consumer4.结果生产者:消费者:可能遇到的坑:最后:

1.创建maven项目

   首先我们使用idea创建项目。


  这里我们使用maven来管理jar包,所以创建的是一个maven项目。

  然后输入GroupId和ArtifactId即可,这两个id在maven中相当于“坐标”,其中ArtifactId是你的项目名。

  这时候,一个maven项目就创建完成了。但是maven还需要配置,我们在idea中找到Preferences(mac系统快捷键:command + ,),搜索maven,接着配置maven home directory(maven安装路径),User settings file(maven 配置文件所在位置 settings.xml), Local repository(本地仓库位置,在setting.xml中配置),配置完成后,点击APPLY即可。到此,一个maven项目就配置完成了。
  最后,我们需要在pom.xml中配置kafka依赖的坐标

1 <dependencies>
2    <dependency>
3        <groupId>org.apache.kafka</groupId>
4        <artifactId>kafka-clients</artifactId>
5        <version>0.11.0.3</version>
6    </dependency>
7</dependencies>

2.kafka producer

  接下来,我们要对kafka中的生产者进行开发。在开发之前,要保证我们kafka服务处于可用的状态。
  生产者程序如下:

 1public class Producer {
2    public static void main(String[] args) {
3        Properties props = new Properties();
4        props.put("bootstrap.servers", "localhost:9092,localhost:9093");
5        props.put("key.serializer",
6                "org.apache.kafka.common.serialization.StringSerializer");
7        props.put("value.serializer",
8                "org.apache.kafka.common.serialization.StringSerializer");
9        props.put("acks", "-1");
10        props.put("retries", 3);
11        props.put("batch.size", 232840);
12        props.put("linger.ms", 10);
13        props.put("buffer.memory", 33554432);
14        props.put("max.block.ms", 3000);
15        KafkaProducer<String, String> producer = new KafkaProducer<String, String>(props);
16        for (int i = 0; i < 100; i++) {
17            producer.send(new ProducerRecord<String, String>(
18                    "my-topic", Integer.toString(i), Integer.toString(i)), new Callback() {
19                public void onCompletion(RecordMetadata recordMetadata, Exception e) {
20                    if (e == null) {
21                        System.out.println("消息发送成功");
22                    } else {
23                        System.out.println(String.format("消息发送失败: %s", e.getMessage()));
24                    }
25                }
26            });
27        }
28        producer.close();
29    }
30}

3.kafka consumer

  接下来是kafka中的消费者代码。

 1public class Consumer {
2    public static void main(String[] args) {
3        String topicName = "my-topic";
4        String groupId = "test-group";
5
6        Properties props = new Properties();
7        props.put("bootstrap.servers", "localhost:9092,localhost:9093");
8        props.put("group.id", groupId);
9        props.put("enable.auto.commit", "true");
10        props.put("auto.commit.interval.ms", "1000");
11        props.put("auto.offset.reset", "earliest");
12        props.put("key.deserializer",
13                "org.apache.kafka.common.serialization.StringDeserializer");
14        props.put("value.deserializer",
15                "org.apache.kafka.common.serialization.StringDeserializer");
16        KafkaConsumer<String, String> consumer = new KafkaConsumer<String, String>(props);
17        // 订阅主题
18        consumer.subscribe(Collections.singletonList(topicName));
19        try {
20            while (true) {
21                ConsumerRecords<String, String> records = consumer.poll(1000);
22                for (ConsumerRecord<String, String> record : records) {
23                    System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value());
24                }
25            }
26        } finally {
27            consumer.close();
28        }
29    }
30}

4.结果

  最后是对代码进行测试。依次启动生产者、消费者实例,观察控制台输出接口。

生产者:

1消息发送成功
2...
3消息发送成功

消费者:

1offset = 0, key = 0, value = 0
2...
3offset = 99, key = 99, value = 99

可能遇到的坑:

  如果你的程序出错,请首先检查代码props是否正确,其次应该确认你的kafka client和kafka server 版本相同,最后bootstrap.servers这个参数的配置值,要与kafka中server.properties中一致,否则将会出现获取不到元数据信息的异常。(消息发送失败: Failed to update metadata after 3000 ms.)

最后:

  上述代码,只是实现了一个最小的生产消费模型,写法上并不规范(比如配置应该写在配置文件中、对于异常应该有处理方法,不能只是输出日志),不能直接使用在生产环境中。只能用于kafka入门学习

  最后,期待您的订阅和点赞,专栏每周都会更新,希望可以和您一起进步,同时也期待您的批评与指正!

从0开始搭建kafka客户端的更多相关文章

  1. oauth2.0服务端与客户端搭建

    oauth2.0服务端与客户端搭建 - 推酷 今天搭建了oauth2.0服务端与客户端.把搭建的过程记录一下.具体实现的功能是:client.ruanwenwu.cn的用户能够通过 server.ru ...

  2. K8S 搭建 Kafka:2.13-2.6.0 和 Zookeeper:3.6.2 集群

    搭建 Kafka:2.13-2.6.0 和 Zookeeper:3.6.2 集群 一.服务版本信息: Kafka:v2.13-2.6.0 Zookeeper:v3.6.2 Kubernetes:v1. ...

  3. 【原创】Windows平台搭建Kafka源代码开发环境(Eclipse版本)

    最近在研究Kafka源代码,需要自己搭建一个开发环境.官网上给出的提示略显简单,照着做了一遍也碰到了一些问题.特此记录下来. 开发环境: Oracle Java 1.7_u71 + Eclipse 4 ...

  4. centos7搭建kafka集群-第二篇

    好了,本篇开始部署kafka集群 Zookeeper集群搭建 注:Kafka集群是把状态保存在Zookeeper中的,首先要搭建Zookeeper集群(也可以用kafka自带的ZK,但不推荐) 1.软 ...

  5. docker容器中搭建kafka集群环境

    Kafka集群管理.状态保存是通过zookeeper实现,所以先要搭建zookeeper集群 zookeeper集群搭建 一.软件环境: zookeeper集群需要超过半数的的node存活才能对外服务 ...

  6. 利用新版本自带的Zookeeper搭建kafka集群

    安装简要说明新版本的kafka自带有zookeeper,其实自带的zookeeper完全够用,本篇文章以记录使用自带zookeeper搭建kafka集群.1.关于kafka下载kafka下载页面:ht ...

  7. 从0开始搭建SQL Server AlwaysOn 第一篇(配置域控)

    从0开始搭建SQL Server AlwaysOn 第一篇(配置域控) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www.cnb ...

  8. 从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群)

    从0开始搭建SQL Server AlwaysOn 第二篇(配置故障转移集群) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://www ...

  9. 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

    从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇http://www.cnblogs.com/lyhabc/p/4678330.html第二篇http://w ...

随机推荐

  1. python-django项目-每次重启电脑需要启动的虚拟机服务_20191124

    python-django项目-每次重启电脑需要启动的虚拟机服务 看来第一步是确定虚拟机的ip问题,必须要是192.168.100.128,否则很多的配置都不能用了, 所以要配置虚拟机的ip, 第一步 ...

  2. javaee验证码如何使用

    首先需要导入jar包 ValidateCode.jar 110   25  为验证码框的大小  4为验证码数目 9为干扰线条数 Servlet代码如下 运行截图如下

  3. JavaScript类的写法(一)

    转自:http://segmentfault.com/a/1190000000725051 js类的基本含义 我们知道,在js中,是没有类的概念的.类的所有实例对象都从同一个原型对象上继承属性,因此, ...

  4. RabbitMQ(1)——基础入门

    本文章写在了CSDN :https://blog.csdn.net/qq_30348181/article/details/87911398

  5. tfjs-node初体验:训练模型的存储

    JS,一门从浏览器兴起,却不止于浏览器的脚本,个人一直认为其是最有潜力的脚本语言.不只是因为ES6优雅的语法,更重要的是其易上手,跨平台的优点. Node将JS从browser带去了client是革命 ...

  6. Mybatis工作流程及其原理与解析

    Mybatis简介:    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBat ...

  7. dubbo分布式框架下web层调用业务层一直报空指针异常的解决办法

    java.lang.NullPointerException............... 环境:SSM(通用mapper)+Dubbo 1.检查导包 提示注解@Reference  应该导入  im ...

  8. MyBatis学习总结之一对多映射

    1.首先创建2张表:students 和grades create table grades( gid ) primary key, gname varchar() ); create table s ...

  9. 点击一个ul的五个li元素,分别弹出他们的序号,怎么做?

    方法1 : for(var i=0; i<oLis.length; i++){ oLis[i].onclick = (function(j){ return function(){ alert( ...

  10. [JS奇怪的世界]No.55 危險小叮嚀:陣列與for in

    前言 前面已經瞭解了使用內建函數建構子的某些危險地方,但其實陣列與for in,也是有一些危險的地方. 陣列與for in 在前面幾個章節有講過陣列就是物件,所以我們一樣可以使用 for in來做處理 ...