kafka复习(1)
一:flume复习
0.JMS(java message service )java消息服务
--------------------------------------------------------------
queue(队列模式):点对点服务只能有一个消费者。也叫做点对点模式
publish-subscribe(发布-订阅模式,也叫做主题模式):
1.flume是收集,聚合,移动日志的框架
2.agent:
source: //接受数据的,生产者
//netcat
//ExecSource实时收集:tail -F xxx.txt
//spooldir监控文件夹
//seq
//Stress 压力测试
//avroSource
channel //暂存数据,相当于缓冲区
//非永久性的:MemoryChannel
//永久性:FileChannel磁盘
//SpillableMemoryChannel:是内存通道和文件通道的一个重组
sink //输出数据,消费者,从通道中提取数据
//HdfsSink //
//HBaseSink //
//HiveSink //
//avroSink
kafka
-------------------------------------------------------
一、kafka简介
1.JMS:java message service :java消息服务
2.kafka:是分布式流处理平台,在系统之间构建实时数据流管道
3.kafka以集群的形式运行有一个或者多个主机,kafka以主题来分类存储记录,每个记录都有key ,value和timestamp
4.Producer:生产者;Consumer:消费者;consumer group消费者组;kafka server 包括broker,kafka服务器
topic:消息以topic为类别记录,每一类的消息称为一个主题
broker:以集群的方式运行,可以由一个或者多个服务组成,每个服务叫做一个broker,消费者可以订阅一个或者多个主题,并从broker拉数据,从而消费这些已经发布的消息
每个消息是由:key+value+timestamp组成
5.kafka:每秒钟百万数据吞吐量
二、安装kafka
0.选择s202 ~ s204三台主机安装kafka
1.准备zk
略
2.jdk
略
3.tar文件
4.环境变量
略
5.配置kafka
[kafka/config/server.properties]
...
broker.id=202
...
listeners=PLAINTEXT://:9092
...
log.dirs=/home/centos/kafka/logs
...
zookeeper.connect=s201:2181,s202:2181,s203:2181
6.分发server.properties,同时修改每个文件的broker.id
7.启动kafka服务器
a)先启动zk
b)启动kafka
[s202 ~ s204]
$>bin/kafka-server-start.sh config/server.properties
c)验证kafka服务器是否启动
$>netstat -anop | grep 9092
8.创建主题
$>bin/kafka-topics.sh --create --zookeeper s202:2181 --replication-factor 3 --partitions 3 --topic test //创建主题,分区数为3
9.查看主题列表
$>bin/kafka-topics.sh --list --zookeeper s202:2181
10.启动控制台生产者
$>bin/kafka-console-producer.sh --broker-list s202:9092 --topic test
11.启动控制台消费者
$>bin/kafka-console-consumer.sh --bootstrap-server s202:9092 --topic test --from-beginning --zookeeper s202:2181 //从头开始消费数据
12.在生产者控制台输入hello world
三、
1.副本:broker存放消息以消息到达的顺序进行存放,生产和消费都是副本感知的,支持n-1个故障,每个分区都有leader
新leader选举的过程是通过isr进行的,第一个注册的follower称为新的leader
2.kafka支持的副本模式:
[同步复制]:
1.producer联系zk识别leader
2.向leader发送消息
3.leader收入消息,写入本地log
4.follower从leader pull消息
5.follower向本地写入log
6.follower向leader发送ack确认消息
7.leader收到所有的ack消息
8.leader向producer回传ack消息
[异步复制]:
合同步复制的区别在与leader写入本地log后,直接向client回传ack消息,不需要等待所有的follower复制完成,但是这种模式不能保证消息被生产者分发
API方式进行访问
------------------------------------------
1.消息生产者
package com.it18zhang.kafkaDemo.test; import kafka.javaapi.producer.Producer;
import kafka.producer.KeyedMessage; import kafka.producer.ProducerConfig;
import org.junit.Test; import java.util.HashMap;
import java.util.Properties; /**
* Created by stone on 2018/8/17.
*/
public class TestProducer {
@Test
public void testSend(){
Properties props = new Properties();
props.put("metadata.broker.list","s202:9092");
props.put("serializer.class","kafka.serializer.StringEncoder");
props.put("request.required.acks","");
//配置生产值配置对象
ProducerConfig config = new ProducerConfig(props);
//创建生产者
Producer<String,String> producer = new Producer<String,String>(config);
KeyedMessage<String,String> msg =new KeyedMessage<String, String>("test2","","hello world jack");
producer.send(msg);
System.out.println("send over");
}
}
2.消息消费者
@Test
public void testConsumer(){
Properties prop = new Properties();
prop.put("zookeeper.connect","s202:2181");
prop.put("group.id","g1");
prop.put("zookeeper.session.timeout.ms","");
prop.put("zookeeper.sync.time.ms","");
//创建消费者配置
Map<String,Integer> map = new HashMap<String, Integer>();
map.put("test2",new Integer());
Map<String, List<KafkaStream<byte[], byte[]>>> msgs= Consumer.createJavaConsumerConnector(new ConsumerConfig(prop) ).createMessageStreams(map);
List<KafkaStream<byte[], byte[]>> msgList = msgs.get("test2");
for(KafkaStream<byte[],byte[]> stream : msgList){
ConsumerIterator<byte[],byte[]> it = stream.iterator();
while(it.hasNext()){
byte[] message = it.next().message();
System.out.println(new String(message));
}
} }
flume与kafka集成的方式
----------------------------------------
1.flume数据sink到kafka
flume充当生产者
a1.sources=r1
a1.sinks=k1
a1.channels=c1
a1.sources.r1.type=netcat
a1.sources.r1.port=8888
a1.sources.r1.bind=localhsot
a1.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
a1.sinks.k1.kafka.topic = test2
a1.sinks.k1.kafka.bootstrap.servers = s202:9092
a1.sinks.k1.kafka.flumeBatchSize = 20
a1.sinks.k1.kafka.producer.acks = 1
a1.sinks.k1.channel = c1
a1.channels.c1.type=memory
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1
2.kafka充当source
flume充当消费者
a1.sources = r1
a1.sinks = k1
a1.channels = c1
a1.sources.r1.type = org.apache.flume.source.kafka.KafkaSource
a1.sources.r1.batchSize = 5000
a1.sources.r1.batchDurationMillis = 2000
a1.sources.r1.kafka.bootstrap.servers = s202:9092
a1.sources.r1.kafka.topics = test3
a1.sources.r1.kafka.consumer.group.id = g4
a1.sinks.k1.type = logger
a1.channels.c1.type=memory
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
3.channels通道临时数据存放地缓冲区 ,flume通道有内存通道,文件通道,同时数据也可以存放进入kafka中去,把消息放在kafka里面,flume充当生产者
a1.sources = r1
a1.sinks = k1
a1.channels = c1
a1.sources.r1.type = avro
a1.sources.r1.bind = localhost
a1.sources.r1.port = 8888
a1.sinks.k1.type = logger
a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel
a1.channels.c1.kafka.bootstrap.servers = s202:9092
a1.channels.c1.kafka.topic = test3
a1.channels.c1.kafka.consumer.group.id = g6
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
kafka复习(1)的更多相关文章
- kafka复习(2)
一.简介 --------------------------------------- 1.kafka是一个分布式的.可分区的.可复制的消息系统.它提供了消息系统的功能,但是有自己独特的设计. 2. ...
- [CDH] Acquire data: Flume and Kafka
Flume 基本概念 一.是什么 Ref: http://flume.apache.org/ 数据源获取:Flume.Google Refine.Needlebase.ScraperWiki.Bloo ...
- JAVA复习笔记分布式篇:kafka
前言:第一次使用消息队列是在实在前年的时候,那时候还不了解kafka,用的是阿里的rocket_mq,当时觉得挺好用的,后来听原阿里的同事说rocket_mq是他们看来kafka的源码后自己开发了一套 ...
- 【原创】kafka producer源代码分析
Kafka 0.8.2引入了一个用Java写的producer.下一个版本还会引入一个对等的Java版本的consumer.新的API旨在取代老的使用Scala编写的客户端API,但为了兼容性 ...
- Kafka学习之路
一直在思考写一些什么东西作为2017年开篇博客.突然看到一篇<Kafka学习之路>的博文,觉得十分应景,于是决定搬来这“他山之石”.虽然对于Kafka博客我一向坚持原创,不过这篇来自Con ...
- 051 Kafka的安装
后来重新复习的时候,发现这篇文章不错:https://www.cnblogs.com/z-sm/p/5691760.html 一:前提 1.安装条件 Java Scala zookeeper Ka ...
- Kafka基础系列第1讲:Kafka的诞生背景及应用
Kafka 是由 LinkedIn 开发的一个分布式的消息系统,使用 Scala 编写,它以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如 Cloudera.Apache Sto ...
- Kafka消息存储原理
kafka消息存储机制 (一)关键术语 复习一下几个基本概念,详见上面的基础知识文章. Broker:消息中间件处理结点,一个Kafka节点就是一个broker,多个broker能够组成一个Kafka ...
- 大数据入门第二十四天——SparkStreaming(二)与flume、kafka整合
前一篇中数据源采用的是从一个socket中拿数据,有点属于“旁门左道”,正经的是从kafka等消息队列中拿数据! 主要支持的source,由官网得知如下: 获取数据的形式包括推送push和拉取pull ...
随机推荐
- [CSP-S模拟测试]:统计(树状数组+乱搞)
题目传送门(内部题120) 输入格式 第一行,两个正整数$n,m$. 第二行,$n$个正整数$a_1,a_2,...,a_n$,保证$1\leqslant a_i\leqslant n$,可能存在相同 ...
- ES6迭代器和生成器
一.迭代器 JavaScript 原有的表示"集合"的数据结构,主要是数组(Array)和对象(Object),ES6 又添加了Map和Set.这样就需要一种统一的接口机制,来处理 ...
- datagrid数据清空
方法一: 不管是url方式还是加载本地数据的方式,均可以直接使用loadData方法清空数据,一行代码就可以清空: $('#tt').datagrid('loadData',{total:0,rows ...
- python问题笔记
1.for...in...:和while...:循环末端都可以有一个else:语句,但他仅在循环不是由break语句退出时才会被运行 2.input raw input区别 一. 可以看到:这两个函数 ...
- CSS二级菜单
0.需求:当鼠标hover到按钮上时,出现下拉菜单导航条. 1.问题拆解: (1)HTML应该如何组织比较方便合理 因为题中要求下拉菜单位于按钮的正下方,可以使用列表<li>中嵌套无序列表 ...
- redis的LRU策略理解
首先看下serverCron中,服务器每次循环执行的时候,都会刷新server.lrulock. int serverCron(struct aeEventLoop *eventLoop, long ...
- 无界面上(linux)运行jmeter(2)
无界面上(linux)运行jmeter 1.先在bin目录下面创建一个文件夹testplan用来存放脚本(.jmx文件),然后在创建一个文件夹testresult用来存放脚本执行后的结果(.jtl文件 ...
- MySQL 创建函数报错 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators
问题描述 通过Navicat客户端,创建MySQL函数(根据的当前节点查询其左右叶子节点)时报错,报错信息如下: This function has none of DETERMINISTIC, NO ...
- 去除雨滴的滤镜 Derain in FFmpeg
Remove the rain in the input image/video by applying the derain methods based on convolutional neura ...
- sudo apt -y upgrade
sudo apt -y upgrade 直接upgrade,不再询问y/n 但是如果是sudo apt-get install scilab -y 那么,就不再显示上图中的信息,即当安装包的时 ...