Kafka (一)
使用Kafka最新版本0.9
Kafka 配置
1. 安装
首先需要安装Java,推荐安装Java8,不然会出现一些莫名其妙的错误
kafka_2.11-0.9.0.0.tgz
tar -xzf kafka_2.11-0.9.0.0.tgz
为了方便,更改一下目录名
mv kafka_2.11-0.9.0.0.tgz kafka
2.配置Kafka服务端属性
安装的是单节点,集群的配置非常简单,可以看看其他的资料
cd config
vim server.properties
有2个关键属性需要修改
advertised.host.name
advertised.port
这2个属性需要修改成IP地址或者机器名,如果Kafka是部署在云端中,可能云端的虚拟机中有别的虚拟IP,需要在这2个地址配置。
这个测试环境中,是部署在虚拟机中,通过路由相连,仍然需要配置这2个属性,将advertised.host.name设置为虚拟机的IP地址。
如果不配置advertised.host.name,只配置host.name,在另外一台机器上使用Java的Client连接时,会被解析成localhost。
3. 启动Kafka自带的Zookeeper
bin/zookeeper-server-start.sh config/zookeeper.properties
4. 启动Kafka
bin/kafka-server-start.sh config/server.properties
Kafka 简单测试
1. 创建Topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
2. 查看Topic
bin/kafka-topics.sh --list --zookeeper localhost:2181
3. 生产消息
新建一个Console
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
输入字符串回车即可
4. 消费消息
新建一个Console
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
在生产消息的Console,继续输入字符并回车,这里会即时消费
Kafka Java客户端
1. Maven文件
<dependency>
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
<version>0.9.0.0</version>
</dependency>
2. Produce代码
Properties props = new Properties();
props.put("bootstrap.servers", "192.168.1.160:9092");
props.put("acks", "all");
props.put("retries", 0);
props.put("batch.size", 16384);
props.put("linger.ms", 1);
props.put("buffer.memory", 33554432);
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); Producer<String, String> producer = new org.apache.kafka.clients.producer.KafkaProducer(props);
for(int i = 0; i < 100; i++)
producer.send(new ProducerRecord<String, String>("my-topic2", Integer.toString(i), Integer.toString(i))); producer.close();
bootstrap.servers即Kafka broker的地址
3. Consumer代码
Properties props = new Properties();
props.put("bootstrap.servers", "192.168.1.160:9092");
props.put("group.id", "test");
props.put("enable.auto.commit", "true");
props.put("auto.commit.interval.ms", "1000");
props.put("session.timeout.ms", "30000");
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
org.apache.kafka.clients.consumer.KafkaConsumer<String, String> consumer = new org.apache.kafka.clients.consumer.KafkaConsumer<String, String>(props);
//consumer.subscribe(Arrays.asList("foo", "bar"));
consumer.subscribe(Arrays.asList("my-topic2")); while (true) {
ConsumerRecords<String, String> records = consumer.poll(1000);
for (ConsumerRecord<String, String> record : records)
System.out.printf("offset = %d, key = %s, value = %s", record.offset(), record.key(), record.value());
}
Consumer Group
Kafka的Consumer可以加入一个Group,如果一个Group中的Consumer数大于该Topic的Partition数,则某些Consumer不会Fetch到数据,如果Consumer数小于Partition数,则某些Consumer会比别的Consumer消费更多的消息。
如果一个Consumer没有加入任何Group,则这个Consumer会消费该Topic下所有Partition的消息
建议最好的方式是一个Consumer对应一个Partition
在Kafka中会储存每个Consumer消费消息的Offset,Consumer可以选择Auto Commit Offset或者Manual Commit
在进行设计时,如果对Consumer有一定一致性的要求,可以选择Manual Commit,例如Consumer宕机,重启或者新Consumer加入时,可以从该Partition的Offset记录位置开始消费,还有一种情况则是Consumer宕机,不重启并且没有新的Consumer加入,在0.9.0。0版本的Kafka中,会有一个Consumer的协调者来处理Consumer的Reblance,启动Reblance,那么在同一个Group中的其他Consumer也可以消费宕机的Consumer订阅的Partition的消息。但这样设计的前提是Consumer必须被设计成无状态的。
Kafka 传递的消息
Kafka传递的消息是<key,value>,让我想起了Map-Reduce,利用Kafka可以快速构建一个轻量级的MR并行分析
Kafka对Hadoop的支持也非常的好。
Kafka (一)的更多相关文章
- 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中横向扩展和一 ...
- Kafka副本管理—— 为何去掉replica.lag.max.messages参数
今天查看Kafka 0.10.0的官方文档,发现了这样一句话:Configuration parameter replica.lag.max.messages was removed. Partiti ...
- Kafka:主要参数详解(转)
原文地址:http://kafka.apache.org/documentation.html ############################# System ############### ...
- kafka
2016-11-13 20:48:43 简单说明什么是kafka? Apache kafka是消息中间件的一种,我发现很多人不知道消息中间件是什么,在开始学习之前,我这边就先简单的解释一下什么是消息 ...
- Spark Streaming+Kafka
Spark Streaming+Kafka 前言 在WeTest舆情项目中,需要对每天千万级的游戏评论信息进行词频统计,在生产者一端,我们将数据按照每天的拉取时间存入了Kafka当中,而在消费者一端, ...
随机推荐
- UML 之 序列图和协作图
序列图(Sequence Diagram) 亦称为时序图或循序图,是一种UML行为图.它通过描写叙述对象之间发送消息的时间顺序显示多个对象之间的动态协作.它能够表示用例的行为顺序,当运行一个用 ...
- ArrayList实现借壳
随着Collections工具: import java.util.ArrayList; import java.util.Collections; public class TTEST { publ ...
- MyEclipse建立JVM内存大小
1.你为什么要设置JVM它的内存大小? 因为假定程序执行过JVM默认的内存大小.他们不会报告传说中的内存溢出异常. Exception in thread "main" java. ...
- Android KitKat 4.4 Wifi移植AP模式和网络共享的调试日志
Tethering技术在移动平台上已经运用的越来越广泛了.它能够把移动设备当做一个接入点,其它的设备能够通过Wi-Fi.USB或是Bluetooth等方式连接到此移动设备.在Android中能够将Wi ...
- 设计模式 - Abstract Factory模式(abstract factory pattern) 详细说明
Abstract Factory模式(abstract factory pattern) 详细说明 本文地址: http://blog.csdn.net/caroline_wendy/article/ ...
- ASP.NET 运行
ASP.NET 运行 对于ASP.NET开发,排在前五的话题离不开请求生命周期.像什么Cache.身份认证.Role管理.Routing映射,微软到底在请求过程中干了哪些隐秘的事,现在是时候揭晓了.抛 ...
- EmEditor Professional(文本编辑) 下载地址
http://www.greenxf.com/soft/2126.html 16.1.5 http://www.cr173.com/soft/3031.html 16.3.0
- java编程规范之java命名规范
想要成为一个优秀的程序员,首先要培养良好的编程习惯,为了提高代码的可读性,必须有好的命名规范. 这篇文章是小编结合网上的很多资料整理出来的,若有不当或错误的地方,欢迎大家指正 在文章开始前,为方便阅读 ...
- 深入解析_Android的自定义布局
前言: 这篇文章是前Firefox Android工程师(现在跳槽去Facebook了) Lucas Rocha所写,文中对Android中常用的四种自定义布局方案进行了很好地分析,并结合这四种And ...
- Linux平台下裸设备的绑定:
Linux平台下裸设备的绑定: 运用RAW绑定 方法一 raw的配置(1) [root@qs-dmm-rh2 mapper]# cat /etc/rc.local #!/bin/sh # # This ...