kafka-简单事例
开始创建项目,这里所用的工程结构是maven。
在pox.xml中添加kafka的依赖包,如下所示:
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka_2.9.1</artifactId>
<version>0.8.2.2</version>
</dependency>
依赖配置参照 http://mvnrepository.com/search?q=kafka 中对应的kafka版本
下面开始编写代码:
1.ConfigureAPI
首先是一个配置结构类文件,配置Kafka的相关参数,代码如下所示:
package com.kafka;
public class ConfigureAPI {
public interface KafkaProperties{
public final static String ZK = "123.56.91.163:2181";
public final static String GROUP_ID = "test-consumer-group";
public final static String TOPIC = "my-topic";
public final static String BROKER_LIST = "123.56.91.163:9092";
public final static int BUFFER_SIZE = 64 * 1024;
public final static int TIMEOUT = 20000;
public final static int INTERVAL = 10000;
}
}
2.Producer
生产消息程序,用于产生Kafka的消息供Consumer去消费,具体代码如下所示:
package com.kafka; import java.util.Properties;
import com.kafka.ConfigureAPI.KafkaProperties;
import kafka.javaapi.producer.Producer;
import kafka.producer.KeyedMessage;
import kafka.producer.ProducerConfig; public class TProducer extends Thread {
private Producer<Integer, String> producer;
private String topic;
private Properties props = new Properties();
private final int SLEEP = 1000 * 3; public TProducer(String topic) {
//配置value序列化类
props.put("serializer.class", "kafka.serializer.StringEncoder");
//配置kafka端口
props.put("metadata.broker.list", KafkaProperties.BROKER_LIST);
props.put("request.required.acks", "1");
producer = new Producer<Integer, String>(new ProducerConfig(props));
this.topic = topic;
} @Override
public void run() {
int offsetNo = 1;
while (true) {
String msg = new String("message_" + offsetNo);
System.out.println("Send-> " + msg + " ");
producer.send(new KeyedMessage<Integer, String>(topic, msg));
offsetNo++;
try {
sleep(SLEEP);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
3.Consumer
消费程序,用于消费Kafka的消息,代码如下所示:
package com.kafka; import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties; import kafka.consumer.Consumer;
import kafka.consumer.ConsumerConfig;
import kafka.consumer.ConsumerIterator;
import kafka.consumer.KafkaStream;
import kafka.javaapi.consumer.ConsumerConnector; import com.kafka.ConfigureAPI.KafkaProperties; public class TConsumer extends Thread {
private ConsumerConnector consumer;
private String topic;
private final int SLEEP = 1000 * 3; public TConsumer(String topic) {
consumer = Consumer.createJavaConsumerConnector(this.consumerConfig());
this.topic = topic;
} private ConsumerConfig consumerConfig() {
Properties props = new Properties();
props.put("zookeeper.connect", KafkaProperties.ZK);
props.put("group.id", KafkaProperties.GROUP_ID);
//zookeeper超时
props.put("zookeeper.session.timeout.ms", "40000");
props.put("zookeeper.sync.time.ms", "200");
props.put("auto.commit.interval.ms", "1000");
return new ConsumerConfig(props);
} @Override
public void run() {
Map<String, Integer> topicCountMap = new HashMap<String, Integer>();
topicCountMap.put(topic, new Integer(1));
Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = consumer.createMessageStreams(topicCountMap);
KafkaStream<byte[], byte[]> stream = consumerMap.get(topic).get(0);
ConsumerIterator<byte[], byte[]> it = stream.iterator();
while (it.hasNext()) {
System.out.println("Receive->[" + new String(it.next().message()) + "]");
try {
sleep(SLEEP);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
4.在开发完Consumer和Producer的代码后,我们来测试相关应用,下面是一个Client去测试Consumer和Producer,具体代码如下所示:
package com.kafka;
import com.kafka.ConfigureAPI.KafkaProperties;
public class KafkaClient {
public static void main(String[] args) {
TProducer pro = new TProducer(KafkaProperties.TOPIC);
pro.start();
TConsumer con = new TConsumer(KafkaProperties.TOPIC);
con.start();
}
}
运行结果如下:

注意:我在测试阶段遇到一个问题就是一直发送不成功,最后定位到kafka启动问题。
之前部署安装 http://www.cnblogs.com/yinchengzhe/p/5111672.html 时,在配置config/server.properties中配置了host.name参数,启动时
是按内网启动的,外网无法访问进去。如果你本地代码和服务器不是同一网络,需要把这个参数去掉
kafka-简单事例的更多相关文章
- ogre3d环境配置 SDK安装配置及简单事例教程
ogre3d环境配置 SDK安装配置及简单事例教程 http://www.cr173.com/html/22594_1.html ogre3d环境配置 SDK安装配置及简单事例教程 http://ww ...
- Kafka 简单实验二(Python实现简单生产者消费者)
Apache Kafka 是什么? Kafka 是一个开源的分布式流处理平台,其简化了不同数据系统的集成.流指的是一个数据管道,应用能够通过流不断地接收数据.Kafka 作为流处理系统主要有两个用处: ...
- storm笔记:Storm+Kafka简单应用
storm笔记:Storm+Kafka简单应用 这几天工作须要使用storm+kafka,基本场景是应用出现错误,发送日志到kafka的某个topic.storm订阅该topic.然后进行兴许处理.场 ...
- java Kafka 简单应用实例
kafka官方中文文档 http://kafka.apachecn.org/ java Kafka 简单应用实例 下面是Linux下的单机模式:https://blog.csdn.net/fct2 ...
- kafka简单回顾
先说说遇到的坑 回顾下kafka topic:生产组:P0\P1----P14 一个消费组:c0 c1 c2 依据Consumer的负载均衡分配 消费顺序"c0:p0-p4 c1:p5-p9 ...
- Kafka简单使用
前言 这几天在写 shell 脚本,学到不少,但是没啥心得之类的,有空可以写个总结(但是大概率不会发表) 现在不算很忙,想再学一点 消息队列相关知识 目前比较出名的也就 RabbitMQ 和 Kafk ...
- kafka具体解释一、Kafka简单介绍
背景: 当今社会各种应用系统诸如商业.社交.搜索.浏览等像信息工厂一样不断的生产出各种信息,在大数据时代,我们面临例如以下几个挑战: 怎样收集这些巨大的信息 怎样分析它 怎样及时做到如上两点 ...
- kafka简单介绍
Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务.它主要用于处理活跃的流式数据. ...
- c#创建、安装、卸载、调试windows服务的简单事例
最近工作中用到了windows服务,对其有深刻理解和丰富经验谈不上,本篇文章只是简单陈诉用c#创建.安装.卸载.调试windows服务的步骤. 一.创建windows服务 1.用VS创建windows ...
- 拖动div简单事例代码
事例文件下载 //拖动容器代码 var rDrag = { o: null, init: function (o) { o.onmousedown = this.start; }, start: fu ...
随机推荐
- Couchbase用的端口
文档首页: http://www.couchbase.com/documentation http://docs.couchbase.com/couchbase-manual-2.2/#prepara ...
- iBatis 的删除一条记录
Student.xml 设置删除参数的类型,可以是一个对象的 <delete id="delStudent" parameterClass="int" & ...
- C#重载重写
overload:重载指的是同一个类中有两个或多个名字相同但是参数不同的方法,(注:返回值不能区别函数是否重载),重载没有关键字.override:过载也称重写是指子类对父类中虚函数或抽象函数的“覆盖 ...
- android 如何解决模块之间的通讯的耦合问题
使用EventBus http://wuyexiong.github.io/blog/2013/04/30/android-fragment/ http://yunfeng.sinaapp.com/? ...
- 记一次网站服务器迁移(my)
遇到的难题: 基本没有遇到太大的问题,因为服务器环境是配好的阿里云环境,最后再nginx的rewrite配置遇到了一点问题,最后也算解决. 收获小点: 1) vim替换命令: 利用 :s 命令可以实现 ...
- method=“post/get”
Form表单中method="post/get'的区别 Form提供了两种数据传输的方式——get和post.虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可能会对数据 ...
- Oracle AWR报告指标全解析-11011552
1-5 Top 5 Timed EventsWaits : 该等待事件发生的次数, 对于DB CPU此项不可用Times : 该等待事件消耗的总计时间,单位为秒, 对于DB CPU 而言是前台进程所消 ...
- 【BZOJ2648】【kd_tree】SJY摆棋子
Description 这天,SJY显得无聊.在家自己玩.在一个棋盘上,有N个黑色棋子.他每次要么放到棋盘上一个黑色棋子,要么放上一个白色棋子,如果是白色棋子,他会找出距离这个白色棋子最近的黑色棋 ...
- 如果数据为null,则转成数据库可识别的DBNULL.Value
// <summary> /// 如果数据为null,则转成数据库可识别的DBNULL.Value /// </summary> /// <param name=&quo ...
- Win7系统下完全删除Mysql
今天不知为什么Mysql服务器突然连接不上,于是胡乱折腾了一番,导致最后不得不重新安装Mysql.安装不成功,服务器起不来,就是最后那步的时候服务器启动不了,这是因为Mysql在卸载的时候没有彻底卸载 ...