kafka_2.11-0.8.2.1+java 生产消费程序demo示例
kafka是吞吐量巨大的一个消息系统,它是用scala写的,和普通的消息的生产消费还有所不同,写了个demo程序供大家参考。kafka的安装请参考官方文档。
首先我们需要新建一个maven项目,然后在pom中引用kafka jar包,引用依赖如下:
- <dependency>
- <groupId>org.apache.kafka</groupId>
- <artifactId>kafka_2.11</artifactId>
- <version>0.8.2.1</version>
- </dependency>
我们用的版本是0.8, 下面我们看下生产消息的代码:
- package com.telewave.kafka.util;
- import java.util.Properties;
- import kafka.javaapi.producer.Producer;
- import kafka.producer.KeyedMessage;
- import kafka.producer.ProducerConfig;
- /**
- *
- * Hello world!
- *
- *
- */
- public class KafkaProducer
- {
- private final Producer<String, String> producer;
- public final static String TOPIC = "TestTopic";
- private KafkaProducer() {
- Properties props = new Properties();
- // 此处配置的是kafka的端口
- props.put("metadata.broker.list", "192.168.168.200:9092");
- // 配置value的序列化类
- props.put("serializer.class", "kafka.serializer.StringEncoder");
- // 配置key的序列化类
- props.put("key.serializer.class", "kafka.serializer.StringEncoder");
- // request.required.acks
- // 0, which means that the producer never waits for an acknowledgement
- // from the broker (the same behavior as 0.7). This option provides the
- // lowest latency but the weakest durability guarantees (some data will
- // be lost when a server fails).
- // 1, which means that the producer gets an acknowledgement after the
- // leader replica has received the data. This option provides better
- // durability as the client waits until the server acknowledges the
- // request as successful (only messages that were written to the
- // now-dead leader but not yet replicated will be lost).
- // -1, which means that the producer gets an acknowledgement after all
- // in-sync replicas have received the data. This option provides the
- // best durability, we guarantee that no messages will be lost as long
- // as at least one in sync replica remains.
- props.put("request.required.acks", "-1");
- producer = new Producer<String, String>(new ProducerConfig(props));
- }
- void produce() {
- int messageNo = 1000;
- final int COUNT = 10000;
- while (messageNo < COUNT) {
- String key = String.valueOf(messageNo);
- String data = "hello kafka message " + key;
- producer.send(new KeyedMessage<String, String>(TOPIC, key, data));
- System.out.println(data);
- messageNo++;
- }
- }
- public static void main(String[] args)
- {
- new KafkaProducer().produce();
- }
- }
下面是消费端的代码实现:
- package com.telewave.kafka.util;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.Properties;
- import org.apache.kafka.clients.producer.KafkaProducer;
- import kafka.consumer.ConsumerConfig;
- import kafka.consumer.ConsumerIterator;
- import kafka.consumer.KafkaStream;
- import kafka.javaapi.consumer.ConsumerConnector;
- import kafka.serializer.StringDecoder;
- import kafka.utils.VerifiableProperties;
- public class KafkaConsumer {
- private final ConsumerConnector consumer;
- public KafkaConsumer() {
- Properties props = new Properties();
- // zookeeper 配置
- props.put("zookeeper.connect", "192.168.168.200:2181");
- // group 代表一个消费组
- props.put("group.id", "jd-group");
- // zk连接超时
- props.put("zookeeper.session.timeout.ms", "4000");
- props.put("zookeeper.sync.time.ms", "200");
- props.put("auto.commit.interval.ms", "1000");
- props.put("auto.offset.reset", "largest");
- // 序列化类
- props.put("serializer.class", "kafka.serializer.StringEncoder");
- ConsumerConfig config = new ConsumerConfig(props);
- consumer = kafka.consumer.Consumer.createJavaConsumerConnector(config);
- }
- public void consume() {
- Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
- topicCountMap.put("TestTopic", new Integer(1));
- StringDecoder keyDecoder = new StringDecoder(new VerifiableProperties());
- StringDecoder valueDecoder = new StringDecoder(
- new VerifiableProperties());
- Map<String, List<KafkaStream<String, String>>> consumerMap =
- consumer.createMessageStreams(topicCountMap, keyDecoder, valueDecoder);
- KafkaStream<String, String> stream = consumerMap.get(
- "TestTopic").get(0);
- ConsumerIterator<String, String> it = stream.iterator();
- while (it.hasNext())
- System.out.println(it.next().message());
- }
- public static void main(String[] args) {
- new KafkaConsumer().consume();
- }
- }
kafka_2.11-0.8.2.1+java 生产消费程序demo示例的更多相关文章
- kafka之三:kafka java 生产消费程序demo示例
kafka是吞吐量巨大的一个消息系统,它是用scala写的,和普通的消息的生产消费还有所不同,写了个demo程序供大家参考.kafka的安装请参考官方文档. 首先我们需要新建一个maven项目,然后在 ...
- 试驾 Citus 11.0 beta
https://www.citusdata.com/blog/2022/03/26/test-drive-citus-11-beta-for-postgres/ Citus 11.0 beta 的最大 ...
- java10.0.2和java 11.0.1配置环境变量
java10.0.2 在网上找了各种方法一直也没配好打开jak下的lib文件夹发现并没有tools.jar,后经查询jdk-9后就没有了上述.jar文件所以我的配置方法如下 ClASSPATH C:\ ...
- 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 ...
- JDBC中 mysql数据库的连接工具类 Java登录 及增删改查 整理 附带:Navicat Premium 11.0.12中文破解版.zip(下载)mysql数据库工具
先写一个工具类,有实现MySQL数据库连接的方法,和关闭数据库连接.关闭ResultSet 结果集.关闭PreparedStatement 的方法.代码如下: package com.swift; ...
- kafka_2.11-2.0.0_安装部署
参考博文:kafka 配置文件参数详解 参考博文:Kafka[第一篇]Kafka集群搭建 参考博文:如何为Kafka集群选择合适的Partitions数量 参考博文:Kafka Server.prop ...
- CM5(5.11.0)和CDH5(5.11.0)离线安装
概述 文件下载 系统环境搭建 日志查看 Q&A 参考 概述 CDH (Cloudera's Distribution, including Apache Hadoop),是Hadoop众多分支 ...
- Kafka生产消费API JAVA实现
Maven依赖: <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka- ...
- RemotelyAnywhere 11.0.2716 SERVER EDITION 绿色破解安装版
RemotelyAnywhere是一个小巧的,利用浏览器进行远程控制的小程序.只要在服务器端安装该软件,然后你就可以通过任何一个支持 Java 的浏览器对远程计算机进行控制了.通过它,你可以管理远程计 ...
随机推荐
- [学习日志]2018-11-18 主要: idea更改java版本
idea更改java版本 问题: 解决办法:
- L2-002. 链表去重(数组模拟)
L2-002. 链表去重 因为数值比较小,所以直接用数组来模拟 #include<cstdio> #include<cstring> #include<iostream& ...
- OpenID 配置步骤
允许客户端基于授权服务器执行的身份验证来验证最终用户的身份,以及以可互操作和类似REST的方式获取关于最终用户的基本配置文件信息. 创建一个MVC客户端 1.新建一个ASP.NET Core MVC应 ...
- [转载] About Career Promotion and Tutoring from Zhihu Web FAQer (Quoted Entirely Without Personal Idea. Delete Immediately If Pirated)
问题: 如何下列各类公司的互联网IT类工作待遇排名? 下列各公司岗位待遇序号从小到大依次降低: 美国互联网总部special offer(15万刀起薪) : 股份制银行总行,证券公司,基金公司IT部门 ...
- Opencv-Python 图像透视变换cv2.warpPerspective
# -*- coding:utf-8 -*- import cv2 import numpy as np import sys img = cv2.imread('test.jpg') # cv2.i ...
- 【转载】 BN(batch normalization)
原文地址: https://blog.csdn.net/qq_35608277/article/details/79212700 ----------------------------------- ...
- models.doc2vec – Deep learning with paragraph2vec
参考: 用 Doc2Vec 得到文档/段落/句子的向量表达 https://radimrehurek.com/gensim/models/doc2vec.html Gensim Doc2vec Tut ...
- 归并排序merge_sort
将区间递归分解,直到区间只有2个元素,然后比较大小,排序,等递归回来的时候就将排序好的子区间再排序合并....一直排序合并,最后就排序完成了. (可以做范围大的逆序数的题) #include < ...
- Blender 精确建模3D打印注意事项
首先参照前面的<Blender的单位:一图弄懂Blender的单位>设置好自己环境的长度单位. 下面的注意事项,没有先后关系,遇到的就会补充. 1. 模型需要进行布尔计算前,在物件我是下, ...
- C++学习(十七)(C语言部分)之 指针
复习 数组定义格式 类型 数组名[数组大小]数组名+下标 int arr[2][3]={{1,2,3},{4,5,6}}; int arr[][3]={1,2,3,4,5,6};//二维数组定义的时候 ...