kafka简介

  kafka是由LinkedIn开发,主要是用来处理Linkedin的大面积活跃数据流处理(activity stream).  此类的数据经常用来反映网站的一些有用的信息,比如PV,页面展示给哪些用户访问,用户搜索什么关键字最多,这类信息经常被log到文件里,然后线下且周期性的去分析这些数据。现在这种用户活跃数据已经成为互联网公司重要的一部分,所以必须构建一个更轻量且更精炼的基础架构。 
 
  活跃数据 使用案列 
    分析一下用户行为(pageviews),以便我能设计出更好的广告位。 
    快速的统计用户投票,点击。
    对用户的搜索关键词进行统计,分析出当前的流行趋势。
    防止用户对网站进行无限制的抓取数据,以及超限制的使用API,辨别垃圾。 
    对网站进行全方位的实时监控,从而得到实时有效的性能数据,并且及时的发成警告。
    批量的导入数据到数据仓库,对数据进行离线分析,从而得到有价值的商业信息。(0.6可以直接将数据导入Hadoop) 
 
  活跃数据的特点 

        高流量的活跃数据是无法确定其大小的,因为他可能随时的变化,比如商家可能促销,节假日打折,突然又冒出一个跳楼价等等。所有的数据可能是数量级的往上递增。 传统日志分析方式都是需要离线,而且操作起来比较复杂,根本无法满足实时的分析。另一方面,现有的消息队列系统只能达到近似实时的分析,因为无法消费大量的持久化在队列系统上的信息。Kafka的目标就是能够成为一个高效的队列平台,无论是处理离线的信息还是在线的信息。

kafka是一个消息订阅和发布的系统,我们将message的发布(publish)者称为producer,将message的订阅(subscribe)者称为consumer,将中间的存储阵列称作broker。它的核心概念有如下几个:
  topic
  partition
  offset
  consumer group

安装伪分布式kafka
    cd /usr/local
    tar -zxvf kafka_2.10-0.8.2.0.tgz
    mv kafka_2.10-0.8.2.0 kafka
    cd /usr/local/kafka/
    启动Kafka自带的ZooKeeper,后台运行
    bin/zookeeper-server-start.sh config/zookeeper.properties >/dev/null 2>&1 &
    启动Kafka服务,后台运行
    bin/kafka-server-start.sh config/server.properties >/dev/null 2>&1 &
    创建一个Kafka的主题,连接到本地zk,副本因子1,分区1,主题名是test
    bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
    查看ZooKeeper上Kafka的主题
    bin/kafka-topics.sh --list --zookeeper localhost:2181
    查看Kafka的主题详情
    bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
    创建生产者
    bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
    创建消费者
    bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning

安装完全分布式kafka,在h5 h6 h7节点上
    在h5节点上安装Kafka,
    要求启动ZooKeeper集群。
    cd /usr/local
    tar -zxvf kafka_2.10-0.8.2.0.tgz
    mv kafka_2.10-0.8.2.0 kafka
    cd /usr/local/kafka/
    vi config/server.properties
        broker.id=36        ##必须是数字
        host.name=h6        ##可以是IP、主机名、域名
        log.dirs=/usr/local/kafka/logs
    scp -rq /usr/local/kafka/ h6:/usr/local
    scp -rq /usr/local/kafka/ h7:/usr/local
    
    
    创建一个Kafka的主题,连接到zk集群,副本因子3,分区3,主题名是test
        bin/kafka-topics.sh --create --zookeeper h5:2181 --topic test111 --replication-factor 3 --partitions 3
    查看Kafka的主题详情
        bin/kafka-topics.sh --describe --zookeeper h5:2181 --topic test111
        zkCli.sh
            ls /brokers/topics/test/
    使用java代码实现kafka的生产者和消费者
        1、生产者

 package com.mengyao.kafka;

             import java.util.Properties;

             import kafka.javaapi.producer.Producer;
import kafka.producer.KeyedMessage;
import kafka.producer.ProducerConfig;
import kafka.serializer.StringEncoder; public class KafkaProducerTest extends Thread { private String topic; public KafkaProducerTest(){ } public KafkaProducerTest(String topic){
this.topic = topic;
} private Producer<Integer, String> getProducer(Properties prop) {
return new Producer<Integer, String>(new ProducerConfig(prop));
} private Properties getProperties() {
Properties prop = new Properties();
prop.put("zookeeper.connect", "h5:2181,h6:2181,h7:2181");
prop.put("serializer.class", StringEncoder.class.getName());
prop.put("metadata.broker.list", "h5:9092,h6:9092,h7:9092");
return prop;
} @Override
public void run() {
Properties prop = getProperties();
Producer<Integer, String> producer = getProducer(prop);
int i = 0;
while (true) {
producer.send(new KeyedMessage<Integer, String>(topic, "msg:"+i++));
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} public static void main(String[] args) {
new KafkaProducerTest("test111").start();
} }

2、消费者

 package com.mengyao.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 kafka.serializer.StringEncoder; public class KafkaConsumerTest extends Thread { private String topic; public KafkaConsumerTest() { } public KafkaConsumerTest(String topic) {
this.topic = topic;
} private ConsumerConnector getConsumer(Properties prop) {
return Consumer.createJavaConsumerConnector(new ConsumerConfig(prop));
} private Properties getProperties() {
Properties prop = new Properties();
prop.put("zookeeper.connect", "h5:2181,h6:2181,h7:2181");
prop.put("serializer.class", StringEncoder.class.getName());
prop.put("metadata.broker.list", "h5:9092,h6:9092,h7:9092");
prop.put("group.id", "group1");
return prop;
} @Override
public void run() {
Properties prop = getProperties();
ConsumerConnector consumer = getConsumer(prop);
HashMap<String, Integer> topicCountMap = new HashMap<String, Integer>();
topicCountMap.put(topic, 1);
Map<String, List<KafkaStream<byte[], byte[]>>> messageStreams = consumer.createMessageStreams(topicCountMap);
KafkaStream<byte[], byte[]> kafkaStream = messageStreams.get(topic).get(0);
ConsumerIterator<byte[], byte[]> iterator = kafkaStream.iterator();
while (iterator.hasNext()) {
final String msg = new String(iterator.next().message());
System.out.println(msg);
}
} public static void main(String[] args) {
new KafkaConsumerTest("test111").start();
} }

Kafka小记的更多相关文章

  1. 小记---------kafka理论及命令行操作

    kafka-0.10.1.X版本之前: auto.offset.reset 的值为smallest,和,largest.(offest保存在zk中)   kafka-0.10.1.X版本之后: aut ...

  2. 小记---------maxwell 一个可以实时读取mysql二进制日志binlog,并生成JSON格式的消息,作为生产者发送给kafka,Redis,文件或其他平台的应用程序

    maxwell主要提供了下列功能     支持 SELECT * FROM table 的方式进行全量数据初始化     支持在主库发生failover后,自动回复binlog位置(GTID)     ...

  3. logstash 学习小记

    logstash 学习小记 标签(空格分隔): 日志收集 Introduce Logstash is a tool for managing events and logs. You can use ...

  4. Spark踩坑记——Spark Streaming+Kafka

    [TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...

  5. 消息队列 Kafka 的基本知识及 .NET Core 客户端

    前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...

  6. kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...

  7. .net windows Kafka 安装与使用入门(入门笔记)

    完整解决方案请参考: Setting Up and Running Apache Kafka on Windows OS   在环境搭建过程中遇到两个问题,在这里先列出来,以方便查询: 1. \Jav ...

  8. kafka配置与使用实例

    kafka作为消息队列,在与netty.多线程配合使用时,可以达到高效的消息队列

  9. kafka源码分析之一server启动分析

    0. 关键概念 关键概念 Concepts Function Topic 用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上. Partition 是Kafka中横向扩展和一 ...

随机推荐

  1. Managing linux Shell Jobs

    Managing Shell Jobs   When moving jobs between the foreground and background, it may be useful to ha ...

  2. Counting Lines, Words, and Characters with wc

      Counting Lines, Words, and Characters with wc   When working with text files, you sometimes get a ...

  3. 【转】node-webkit:开发桌面+WEB混合型应用的神器

    顾名思义,node-webkit就是nodejs+webkit. 这样做的好处显而易见,核心奥义在于,用nodejs来进行本地化调用,用webkit来解析和执行HTML+JS. 快速上手 下载node ...

  4. js获取当前日期时间同时显示星期

    JavaScript获取当前日期时间同时显示星期几,具体代码如下: <html> <head> <meta http-equiv="Content-Type&q ...

  5. component object model(组件对象模型)

    通常,COM是以 win32动态链接库(dll)或可执行文件(exe)的形式发布. 在COM中,接口就是一切,对于客户来说,一个组件就是一个接口集.COM接口是一个包含一个函数指针数组的内存结构. 组 ...

  6. Fiddler 网页采集抓包利器

    最近这段时间,网页采集方面的工作做得比较多.用curl技术开发了一个微信文章聚合类产品,把抓取到的数据转换成json格式,并在android端调用json数据接口加以显示:基于weiphp做了一个掌上 ...

  7. DOM动态添加表格

    var table=document.createElement("table"); table.border=1; var b=document.createElement(&q ...

  8. The Primo ScholarRank Technology: Bringing the Most Relevant Results to the Top of the List

    By Tamar Sadeh, Director of Marketing In today’s world, users’ expectations for a quick and easy sea ...

  9. :after伪类+content内容生成经典应用举例

    一.简单说说content内容生成 content内容生成就是通过content属性生成内容,content属性早在CSS2.1的时候就被引入了,可以使用:before以及:after伪元素生成内容. ...

  10. 一个读取C#特性Description方法

    class Program { static void Main(string[] args) { string str= DB.write.ToDescription(); Console.Writ ...