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. C#&Sql获取中文字符拼音首字母的方法

    C#获取字符拼音首字母,可以存储在数据库中以备将来按字母搜索的需求. public static string GetAc(string s) { try { string temp = Servic ...

  2. ANDROID内存优化(大汇总——中)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...

  3. linux定时任务1-crontab命令

    简单测试例子: 添加定时任务前,注意查看crond服务是否已经启动,如果未启动,则用命令service crond start命令启动. 注意给脚本添加可执行权限. [root@rheltest1 ~ ...

  4. NS2仿真:公交车移动周期模型及性能分析

    NS2仿真实验报告3 实验名称:公交车移动周期模型及性能分析 实验日期:2015年3月16日~2015年3月21日 实验报告日期:2015年3月22日 一.实验环境(网络平台,操作系统,网络拓扑图) ...

  5. 在java代码中显示json字符串(怎么避免json字符串中双引号在java代码中显示)

    String log = "eyJvcmRlckluZm8iOnsiaWQiOjEwNzQwNCwib3JkZXJJZCI6MjczNjQyMSwicHJvZHVjdENvZGUiOjQ1N ...

  6. Hadoop参数优化

    dfs.block.size 决定HDFS文件block数量的多少(文件个数),它会间接的影响Job Tracker的调度和内存的占用(更影响内存的使用), mapred.map.tasks.spec ...

  7. Linux下安装Oracle 10g(redhat 4)

    --注:本篇文章只装Oracle,并没有建库 一:在虚拟机里装个readhat 4系统 二:配IP 配好之后的IP如下: 三:建用户组,用户 注意:oracle用户应具有相同的uid. groupad ...

  8. 利用Format函数格式化时间和日期

    在做机房收费系统的时候,因为需要使用到日期进行查询,所以在数据表中没有使用自动添加日期的功能,而是采用了自定义的格式插入.但由于事先没有对时间转换的格式进行统一,导致后面查询时出现的问题不断. 插入时 ...

  9. Python3学习之一环境搭建

    Windows 7 Python343下载 PTVS下载 Linux CentOS7 wget https://www.python.org/ftp/python/3.4.3/Python-3.4.3 ...

  10. 【C#】委托与事件

    一.委托 1.概念:用来存放 方法 指针(地址)的容器. 为什么要有委托?当有的业务代码总体已经实现,但有部分需要调用者来决定,就可以使用委托的方式,让调用者把一段代码以 方法的方式 传入. [例子] ...