一个、整体外观Kafka

我们知道。Kafka系统有三大组件:Producer、Consumer、broker 。


producers 生产(produce)消息(message)并推(push)送给brokers,consumers从brokers把消息提取(pull)出来消费(consume)。

二、开发一个Producer应用    
     Producers用来生产消息并把产生的消息推送到Kafka的Broker。Producers能够是各种应用。比方web应用。server端应用,代理应用以及log系统等等。

当然。Producers如今有各种语言的实现比方Java、C、Python等。

     我们先看一下Producer在Kafka中的角色:
     

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc3VpZmVuZzMwNTE=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">   

2.1.kafka Producer 的 API
Kafka中和producer相关的API有三个类
  • Producer:最基本的类。用来创建和推送消息
  • KeyedMessage:定义要发送的消息对象,比方定义发送给哪个topic,partition key和发送的内容等。
  • ProducerConfig:配置Producer。比方定义要连接的brokers、partition class、serializer class、partition key等
2.2以下我们就写一个最简单的Producer:产生一条消息并推送给broker
package bonree.producer;

import java.util.Properties;

import kafka.javaapi.producer.Producer;
import kafka.producer.KeyedMessage;
import kafka.producer.ProducerConfig; /*******************************************************************************
* BidPlanStructForm.java Created on 2014-7-8
* Author: <a href=mailto:wanghouda@126.com>houda</a>
* @Title: SimpleProducer.java
* @Package bonree.producer
* Description:
* Version: 1.0
******************************************************************************/
public class SimpleProducer {
private static Producer<Integer,String> producer;
private final Properties props=new Properties();
public SimpleProducer(){
//定义连接的broker list
props.put("metadata.broker.list", "192.168.4.31:9092");
//定义序列化类(Java对象传输前要序列化)
props.put("serializer.class", "kafka.serializer.StringEncoder");
producer = new Producer<Integer, String>(new ProducerConfig(props));
}
public static void main(String[] args) {
SimpleProducer sp=new SimpleProducer();
//定义topic
String topic="mytopic";
//定义要发送给topic的消息
String messageStr = "send a message to broker ";
//构建消息对象
KeyedMessage<Integer, String> data = new KeyedMessage<Integer, String>(topic, messageStr);
//推送消息到broker
producer.send(data);
producer.close();
}
}
三、开发一个consumer应用
     Consumer是用来消费Producer产生的消息的,当然一个Consumer能够是各种应用。如能够是一个实时的分析系统。也能够是一个数据仓库或者是一个基于公布订阅模式的解决方式等。Consumer端相同有多种语言的实现,如Java、C、Python等。

     我们看一下Consumer在Kafka中的角色:
   
3.1.kafka Producer 的 API
     Kafka和Producer略微有些不同。它提供了两种类型的API
  • high-level consumer API:提供了对底层API的抽象,使用起来比較简单
  • simple consumer API:同意重写底层API的实现,提供了很多其它的控制权,当然使用起来也复杂一些
因为是第一个应用,我们这部分使用high-level API,它的特点每消费一个message自己主动移动offset值到下一个message。关于offset在后面的部分会单独介绍。与Producer类似,和Consumer相关的有三个基本的类:
  • KafkaStream:这里面返回的就是Producer生产的消息
  • ConsumerConfig:定义要连接zookeeper的一些配置信息(Kafka通过zookeeper均衡压力,详细请查阅见面几篇文章)。比方定义zookeeper的URL、group id、连接zookeeper过期时间等。
  • ConsumerConnector:负责和zookeeper进行连接等工作
3.2以下我们就写一个最简单的Consumer:从broker中消费一个消息
package bonree.consumer;

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; /******************************************************************************* * Created on 2014-7-8 Author: <a
* href=mailto:wanghouda@126.com>houda</a>
* @Title: SimpleHLConsumer.java
* @Package bonree.consumer Description: Version: 1.0
******************************************************************************/
public class SimpleHLConsumer {
private final ConsumerConnector consumer;
private final String topic; public SimpleHLConsumer(String zookeeper, String groupId, String topic) {
Properties props = new Properties();
//定义连接zookeeper信息
props.put("zookeeper.connect", zookeeper);
//定义Consumer全部的groupID,关于groupID,后面会继续介绍
props.put("group.id", groupId);
props.put("zookeeper.session.timeout.ms", "500");
props.put("zookeeper.sync.time.ms", "250");
props.put("auto.commit.interval.ms", "1000");
consumer = Consumer.createJavaConsumerConnector(new ConsumerConfig(props));
this.topic = topic;
} public void testConsumer() {
Map<String, Integer> topicCount = new HashMap<String, Integer>();
//定义订阅topic数量
topicCount.put(topic, new Integer(1));
//返回的是全部topic的Map
Map<String, List<KafkaStream<byte[], byte[]>>> consumerStreams = consumer.createMessageStreams(topicCount);
//取出我们要须要的topic中的消息流
List<KafkaStream<byte[], byte[]>> streams = consumerStreams.get(topic);
for (final KafkaStream stream : streams) {
ConsumerIterator<byte[], byte[]> consumerIte = stream.iterator();
while (consumerIte.hasNext())
System.out.println("Message from Single Topic :: " + new String(consumerIte.next().message()));
}
if (consumer != null)
consumer.shutdown();
} public static void main(String[] args) {
String topic = "mytopic";
SimpleHLConsumer simpleHLConsumer = new SimpleHLConsumer("192.168.4.32:2181", "testgroup", topic);
simpleHLConsumer.testConsumer();
} }
四、执行查看结果
先启动server端相关进程:
  • 执行zookeeper:[root@localhost kafka-0.8]# bin/zookeeper-server-start.sh config/zookeeper.properties
  • 执行Kafkabroker:[root@localhost kafka-0.8]# bin/kafka-server-start.sh config/server.properties
再执行我们写的应用
  • 执行刚才写的SimpleHLConsumer 类的main函数,等待生产者生产消息
  • 执行SimpleProducer的main函数。生产消息并push到broker

结果:执行完SimpleProducer后在SimpleHLConsumer的控制台就可以看到生产者生产的消息:“send a message to broker”。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

kafka解释三的具体:发展Kafka应用的更多相关文章

  1. kafka学习(三)-kafka集群搭建

    kafka集群搭建 下面简单的介绍一下kafka的集群搭建,单个kafka的安装更简单,下面以集群搭建为例子. 我们设置并部署有三个节点的 kafka 集合体,必须在每个节点上遵循下面的步骤来启动 k ...

  2. CentOS7 搭建Kafka(三)工具篇

    CentOS7 搭建Kafka(三)工具篇 做为一名懒人,自然不喜欢敲那些命令,一个是容易出错,另外一个是懒得记,能有个工具就最好了,一查还挺多,我们用个最主流的Kafka Manager Kafka ...

  3. 【原创】阿里三面:搞透Kafka的存储架构,看这篇就够了

    阅读本文大约需要30分钟.这篇文章干货很多,希望你可以耐心读完. 你好, 我是华仔,在这个 1024 程序员特殊的节日里,又和大家见面了. 从这篇文章开始,我将对 Kafka 专项知识进行深度剖析, ...

  4. Kafka 入门三问

    目录 1 Kafka 是什么? 1.1 背景 1.2 定位 1.3 产生的原因 1.4 Kafka 有哪些特征 消息和批次 模式 主题和分区 生产者和消费者 broker 和 集群 1.5 Kafka ...

  5. Kafka设计解析(五)- Kafka性能测试方法及Benchmark报告

    本文转发自Jason’s Blog,原文链接 http://www.jasongj.com/2015/12/31/KafkaColumn5_kafka_benchmark 摘要 本文主要介绍了如何利用 ...

  6. Kafka设计解析(七)- Kafka Stream

    本文介绍了Kafka Stream的背景,如Kafka Stream是什么,什么是流式计算,以及为什么要有Kafka Stream.接着介绍了Kafka Stream的整体架构,并行模型,状态存储,以 ...

  7. Kafka集群安装部署、Kafka生产者、Kafka消费者

    Storm上游数据源之Kakfa 目标: 理解Storm消费的数据来源.理解JMS规范.理解Kafka核心组件.掌握Kakfa生产者API.掌握Kafka消费者API.对流式计算的生态环境有深入的了解 ...

  8. Kafka设计解析(七)Kafka Stream

    转载自 技术世界,原文链接 Kafka设计解析(七)- Kafka Stream 本文介绍了Kafka Stream的背景,如Kafka Stream是什么,什么是流式计算,以及为什么要有Kafka ...

  9. Kafka设计解析(五)Kafka性能测试方法及Benchmark报告

    转载自 技术世界,原文链接 Kafka设计解析(五)- Kafka性能测试方法及Benchmark报告 摘要 本文主要介绍了如何利用Kafka自带的性能测试脚本及Kafka Manager测试Kafk ...

随机推荐

  1. POJ 2773 Happy 2006 数学题

    题目地址:http://poj.org/problem?id=2773 因为k可能大于m,利用gcd(m+k,m)=gcd(k,m)=gcd(m,k)的性质,最后可以转化为计算在[1,m]范围内的个数 ...

  2. linux c编程 多线程(初级)《转载》---赠人玫瑰,手有余香!

    原文地址:http://blog.csdn.net/liang890319/article/details/8393120   进程简单的说就是把一段代码复制成多份,并让他们同时执行.进程间通信是为了 ...

  3. PL/SQL批处理语句(BULK COLLECT子句和FORALL语句)

    Oracle为PL/SQL中的SQL相关功能提供了FORALL语句和BULK COLLECT子句,显著的增强了SQL相关功能.这两个语句一起被称作PL/SQL的批处理语句.Oracle为什么要提供这两 ...

  4. Matlab图像处理系列1———线性变换和直方图均衡

    注:本系列来自于图像处理课程实验,用Matlab实现最主要的图像处理算法 图像点处理是图像处理系列的基础,主要用于让我们熟悉Matlab图像处理的编程环境.灰度线性变换和灰度拉伸是对像素灰度值的变换操 ...

  5. xcode6 cocos2dx开玩笑git和github学习记录

    1. git Xcode4开始,它一直Git作为一个内置的源代码控制(Source Control)工具,所以对于新项目的用途git要管理非常方便.在新建项目向导.可以直接选择Git作为源控制工具.项 ...

  6. Redis Destop Manager不能访问虚拟机

    虚拟机centOS中安装Redis,主机Redis Destop Manager不能访问虚拟机Redis server的解决方案 今天在学些redis的时候碰到个问题,发现主机Redis Destop ...

  7. centos 安装 redis3.2.0 集群

    这里创建6个redis节点,其中三个为主节点,三个为从节点. redis和端口对应关系: 127.0.0.1:7000 127.0.0.1:7001 127.0.0.1:7002 从: 127.0.0 ...

  8. nginx &amp; flup &amp; django &amp; python3.x @ window7配置备忘录

    最近考虑原Prism建筑(非职业.半专业人士认为C/S建筑)至B/S迁移,主要是由于部署问题,包括两个因素:已经做,虽然一键安装和部署的一个因素,心存顾虑,虽然我一再声明这是一个绿色软件.还有一个因素 ...

  9. linux下的开源移动图像监测程序--motion编译与配置

    前几天在网上偶然看到一篇博客,是利用linxu下的开源的motion搭建嵌入式视频动态监控系统,感觉很好很强大于,是就想自己编译移植一下试试. 所谓移动图像监测,简单来说就是利用摄像头定点监测某个区域 ...

  10. Typings实现智能

    在Visual Studio Code中通过Typings实现智能提示功能   前言 我们知道在IDE中代码的智能提示几乎都是标配,虽然一些文本编辑器也有一些简单的提示,但这是通过代码片段提供的.功能 ...