Kafka小记
kafka简介
高流量的活跃数据是无法确定其大小的,因为他可能随时的变化,比如商家可能促销,节假日打折,突然又冒出一个跳楼价等等。所有的数据可能是数量级的往上递增。 传统日志分析方式都是需要离线,而且操作起来比较复杂,根本无法满足实时的分析。另一方面,现有的消息队列系统只能达到近似实时的分析,因为无法消费大量的持久化在队列系统上的信息。Kafka的目标就是能够成为一个高效的队列平台,无论是处理离线的信息还是在线的信息。
安装伪分布式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小记的更多相关文章
- 小记---------kafka理论及命令行操作
kafka-0.10.1.X版本之前: auto.offset.reset 的值为smallest,和,largest.(offest保存在zk中) kafka-0.10.1.X版本之后: aut ...
- 小记---------maxwell 一个可以实时读取mysql二进制日志binlog,并生成JSON格式的消息,作为生产者发送给kafka,Redis,文件或其他平台的应用程序
maxwell主要提供了下列功能 支持 SELECT * FROM table 的方式进行全量数据初始化 支持在主库发生failover后,自动回复binlog位置(GTID) ...
- logstash 学习小记
logstash 学习小记 标签(空格分隔): 日志收集 Introduce Logstash is a tool for managing events and logs. You can use ...
- Spark踩坑记——Spark Streaming+Kafka
[TOC] 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端,我们利用了spark strea ...
- 消息队列 Kafka 的基本知识及 .NET Core 客户端
前言 最新项目中要用到消息队列来做消息的传输,之所以选着 Kafka 是因为要配合其他 java 项目中,所以就对 Kafka 了解了一下,也算是做个笔记吧. 本篇不谈论 Kafka 和其他的一些消息 ...
- kafka学习笔记:知识点整理
一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...
- .net windows Kafka 安装与使用入门(入门笔记)
完整解决方案请参考: Setting Up and Running Apache Kafka on Windows OS 在环境搭建过程中遇到两个问题,在这里先列出来,以方便查询: 1. \Jav ...
- kafka配置与使用实例
kafka作为消息队列,在与netty.多线程配合使用时,可以达到高效的消息队列
- kafka源码分析之一server启动分析
0. 关键概念 关键概念 Concepts Function Topic 用于划分Message的逻辑概念,一个Topic可以分布在多个Broker上. Partition 是Kafka中横向扩展和一 ...
随机推荐
- Apache http强制转为https页面访问(转)
1 在httpd.conf文件里使下面模块生效 LoadModule rewrite_module modules/mod_rewrite.so 2 httpd.conf配置文件或者是在httpd ...
- STL之auto_ptr
What's auto_ptr? The auto_ptr type is provided by the C++ standard library as a kind of a smart poin ...
- c-100米球反弹
#include <iostream> #define TIMES 10 int main(void) { ; ; //第一次反弹的高度. ; i <= TIMES; i++) { ...
- SpringMVC简单例子
http://www.cnblogs.com/wawlian/archive/2012/11/17/2775435.html
- VC Windows系统服务创建代码
Windows系统服务创建步骤,常用类封装,废话不多说,直接上代码 // ServceDemo.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" ...
- Mac系统配置多个git账号
1.进入ssh目录 #cd ~/.ssh/ 2.用ssh-keygen命令生成一组新的id_rsa_new和id_rsa_new.pub #ssh-keygen -t rsa -C"new ...
- 对于没有Command属性时,怎么来达到相同的效果
控件是第三方Telerik控件 CellEditEnded事件想写成Command{Binding CellEditEndedCommand} 这样的效果如下代码 需要引用 System.Wind ...
- 转载,crtmpserver文件夹结构分析
1. 顶层(crtmpserver/) 下的文件夹结构 3rdparty/ : 对lua, xml进行解析的源代码文件夹 sources/ : 项目的 ...
- LR:Code - 60990,Code - 10343 问题解决
Code - 60990 Error: Two Way Communication Error: Function two_way_comm_post_message /two_way_comm_po ...
- PHPCMS v9 模型概念及用法
phpcms v9 模型概念 一.什么是模型? 模型是系统知识的抽象表示.我们不能仅仅通过语言来描述一个系统,也不能仅仅通过记忆来记录关于系统的知识.知识是通过某种媒介来表达的,这种媒介所表达的内容就 ...