开始创建项目,这里所用的工程结构是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-简单事例的更多相关文章

  1. ogre3d环境配置 SDK安装配置及简单事例教程

    ogre3d环境配置 SDK安装配置及简单事例教程 http://www.cr173.com/html/22594_1.html ogre3d环境配置 SDK安装配置及简单事例教程 http://ww ...

  2. Kafka 简单实验二(Python实现简单生产者消费者)

    Apache Kafka 是什么? Kafka 是一个开源的分布式流处理平台,其简化了不同数据系统的集成.流指的是一个数据管道,应用能够通过流不断地接收数据.Kafka 作为流处理系统主要有两个用处: ...

  3. storm笔记:Storm+Kafka简单应用

    storm笔记:Storm+Kafka简单应用 这几天工作须要使用storm+kafka,基本场景是应用出现错误,发送日志到kafka的某个topic.storm订阅该topic.然后进行兴许处理.场 ...

  4. java Kafka 简单应用实例

    kafka官方中文文档  http://kafka.apachecn.org/ java Kafka 简单应用实例  下面是Linux下的单机模式:https://blog.csdn.net/fct2 ...

  5. kafka简单回顾

    先说说遇到的坑 回顾下kafka topic:生产组:P0\P1----P14 一个消费组:c0 c1 c2 依据Consumer的负载均衡分配 消费顺序"c0:p0-p4 c1:p5-p9 ...

  6. Kafka简单使用

    前言 这几天在写 shell 脚本,学到不少,但是没啥心得之类的,有空可以写个总结(但是大概率不会发表) 现在不算很忙,想再学一点 消息队列相关知识 目前比较出名的也就 RabbitMQ 和 Kafk ...

  7. kafka具体解释一、Kafka简单介绍

    背景:      当今社会各种应用系统诸如商业.社交.搜索.浏览等像信息工厂一样不断的生产出各种信息,在大数据时代,我们面临例如以下几个挑战: 怎样收集这些巨大的信息 怎样分析它 怎样及时做到如上两点 ...

  8. kafka简单介绍

    Kafka是分布式发布-订阅消息系统.它最初由LinkedIn公司开发,之后成为Apache项目的一部分.Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务.它主要用于处理活跃的流式数据. ...

  9. c#创建、安装、卸载、调试windows服务的简单事例

    最近工作中用到了windows服务,对其有深刻理解和丰富经验谈不上,本篇文章只是简单陈诉用c#创建.安装.卸载.调试windows服务的步骤. 一.创建windows服务 1.用VS创建windows ...

  10. 拖动div简单事例代码

    事例文件下载 //拖动容器代码 var rDrag = { o: null, init: function (o) { o.onmousedown = this.start; }, start: fu ...

随机推荐

  1. sql知识点的积累和使用过的例子

    越来越发现自己的sql方面的知识的欠缺,所以只能放低姿态一点一点的学了 一 游标和charIndex的使用. 游标我一直没用过,以前只是在同事们写的存储过程里见过,但是一直没看明白(可是我就是比较笨吧 ...

  2. node基础再现--module.exports 和exports

    实际上,最最基础的方法,最最原始的方法是module.exports,至于exports,是为了方便书写才出来的,应该说,module.exports 包含exports,所工作的范围更加的广泛! m ...

  3. Java-Hibernate官方英文文档地址

    Hibernate官方英文文档地址  http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html/

  4. appium系列教程(转载)

    1.系列文章:转载来源:乙醇的cnblog http://www.kuqin.com/shuoit/20140704/340994.html 2.环境部署:http://www.51testing.c ...

  5. Mongodb 启动时 lock文件访问没有权限处理

    mongodb 第二次启动时候异常信息: lock file: /data/db/mongod.lock errno:13 Permission denied Is a mongod instance ...

  6. angularjs-googleMap googleMap api地址解析与反解析

    1.js:根据地址得到经纬度var myplace=$scope.place;//获取输入的地址var geocoder = new google.maps.Geocoder();//创建geocod ...

  7. 【转】 CoreGraphics QuartzCore CGContextTranslateCTM 用法

    原文:http://blog.csdn.net/sqc3375177/article/details/25708447 CoreGraphics.h 一些常用旋转常量 #define M_E 2.71 ...

  8. 极端气候频现 五款开发天气预报应用的API

    http://www.csdn.net/article/2014-02-07/2818322-weather-forecast-api-for-developing-apps

  9. Tenth Line

    How would you print just the 10th line of a file? For example, assume that file.txt has the followin ...

  10. 使用appium做自动化时如何切换activity

    在使用appium过程中遇到了执行一个用例时有多个不同的acitivity的情况,以下为app内部切换acitivity的方法: 如果仅需要切换一次activity,可以通过设置desired_cap ...