Kafka学习笔记

Kafka学习笔记

Apache Kafka概述

Apache Kafka是一个分布式发布-订阅消息系统和一个强大的队列,可以处理大量数据,并将消息从一个端点传递到另一个端点。

优点:

A. 可靠性,分布式、分区、复制和容错

B. 可扩展行,消息传递系统轻松缩放,不需要停机就能操作

C. 耐用性,使用“分布式提交日志”,消息尽量保留在磁盘上

D. 性能,对发布和订阅消息都具有高吞吐量且性能稳定

Apache Kafka基础

Kafka:主题、经纪人、生产者和消费者

主题:属于特定类别的消息流成为主题(Topic)

分区:主题可能有许多分区,因此可以处理任意数量的数据(Partition)

分区偏移:每个分区消息具有称为“offset”的唯一序列标识(Partition offset)

分区备份:副本是一个分区的“备份”,没有数据的读取和写入操作,用于防止 数据丢失(Replicas of partition)

经纪人:代理是负责维护发布数据的简单系统(Brokers)

Kafka集群:kafka有多个代理被称为集群(Kafka Cluster)

生产者:生产者是发送给一个或多个Kafka主题消息的发布者(Producers)

消费者:从经纪人处读取数据(Consumer)

领导者:负责给定分区的所有读取和写入节点,每个分区都有一个服务器充 当leader(Leader)

追随者:跟随领导者指令的节点,如果领导失败,一个追随者将自动成为新 的领导者(Follower)

安装配置Kafka

1.下载Kafka,官方默认建议下载的镜像站点

We suggest the following mirror site for your download:

http://mirrors.shu.edu.cn/apache/kafka/1.1.0/kafka-1.1.0-src.tgz

Other mirror sites are suggested below.

It is essential that you verify the integrity of the downloaded file using the

PGP signature (.asc file) or a hash (.md5 or .sha* file).

Please only use the backup mirrors to download KEYS, PGP and MD5 sigs/hashes or

if no other mirrors are working.

2.解压、配置

tar -xzvf kafka_2.11-0.9.0.1.tgz

mv kafka_2.11-0.9.0.1 /opt/

vi /etc/profile

在末尾添加:

KAFKA_HOME=/opt/kafka_2.11-0.9.0.1

PATH=$PATH:$KAFKA_HOME/bin

cd /opt/kafka_2.11-0.9.0.1/config

vi server.properties

修改配置文件中的以下内容:

broker.id=0        //为依次增长的:0、1、2、3、4,集群中唯一id

log.dirs=/opt/kafka_2.11-0.9.0.1/logs    //日志地址

zookeeper.connect=master:2181,slave1:2181,slave2:2181 //zookeeperServers列

表,各节点以逗号分开

3.启动程序

nohup bin/kafka-server-start.sh config/server.properties&

nohup &是实现在后台启动。

4.测试

启动producer

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

启动consumer

bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-

beginning


Kafka-topic操作

增:新增一个topic:“hello”,为它分配一个分区,设置一个副本

bin/kafka-topics.sh --create --zookeeper localhost:2181

--replication-factor 1(父本因子)

--partitions 1(分区为1)  --topic hello

注意:partition-factor不能大于broker节点数

 

查:查询topichello的信息

查询指定topic的详细信息

bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic hello

查询所有可以使用的topic

Bin/kafka-topics.sh --list --zookeeper localhost:2181

 

改:修改hello5个分区 alter:修改partition数(只能增加不能减少,因为删除partition会导致数据丢失)

bin/kafka-topics.sh --alter --zookeeper localhost:2181 --partitions 5 --topic hello

 

删:删除topic

Bin/kafka-topics.sh --delete --zookeeper localhost:2181 --topic hello(状态为标记 删除,但是还可以使用,不会报错)

是否开启topic的删除功能:默认为false,可以修改为true

Delete.topic.enable conf/server.propertiesdelete.topic.enable=true


Kafka-生产消费操作

创建生产者producer(必须的参数)

Broker-list:kafka的服务地址【多个用逗号隔开】

Topic:具体的单个topic

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic hello

 

创建消费者consumer(必须的参数)

Bootstrap-server:kafka的服务地址

Topic:具体的topic

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic hello

--from-begining】表示从头开始消费,能够消费在此消费启动之前生产的数据

注意:标记为删除的topic也可以使用


Apache kafka整合Storm

关于Storm

Storm最初由Nathan Marz和BackType的团队创建。 在短时间内,Apache Storm成为分布式实时处理系统的标准,允许您处理大量数据。 Storm是非常快的,并且一个基准时钟为每个节点每秒处理超过一百万个元组。Apache Storm持续运行,从配置的源(Spouts)消耗数据,并将数据传递到处理管道(Bolts)。 联合,Spouts和Bolt构成一个拓扑。

Spouts是流的源

例如,一个喷头可以从Kafka Topic读取元组并将它们作为流发送。 Bolt消耗输入流,处理并可能发射新的流

Bolt可以从运行函数,过滤元组,执行流聚合,流连接,与数据库交谈等等做任何事情

Storm拓扑中的每个节点并行执行

拓扑无限运行,直到终止它。 Storm将自动重新分配任何失败的任务。 此外,Storm保证没有数据丢失,即使机器停机和消息被丢弃

Storm集成

Kafka和Storm集成是为了使开发人员更容易地从Storm拓扑获取和发布数据流。

 

Kafka-Storm集成API

主要有三个类集成Kafka与Storm,如下:

BrokerHosts-----是一个接口ZkHosts和StaticHosts是它的主要两个实现

ZkHosts-----用于通过在ZooKeeper中维护细节来动态跟踪Kafka代理

StaticHosts------用于手动/静态设置Kafka代理及其详细信息

 

ZkHosts是访问Kafka代理的简单快捷的方法,ZkHosts签名如下:

Public ZkHosts(String brokerZkStr,String brokerZkPath)

Public ZkHosts(String brokerZkStr)

brokerZkStr------是ZooKeeper主机

brokerZkPath-----是ZooKeeper路径一维护Kafka代理详细信息

 

 

KafkaConfig API

用于定义Kafka集群的配置设置

Public KafkaConfig(BrokerHosts hosts,String topic)

BrokerHosts--------可以是ZkHosts,也可以是StaticHosts

Topic-----主题名称

 

SpoutConfig API

KafkaConfig的扩展,支持额外的ZooKeeper信息

Public SpoutConfig(BrokerHosts hosts,String topic,String zkRoot,String id)

BrokerHosts-------可以是是BrokerHosts接口的任何实现

zkRoot-------ZooKeeper根路径

Id--------spouts存储在ZooKeeper中消耗的偏移量的状态,id属唯一标识

 

SchemeAsMultiScheme

SchemeAsMultiScheme是一个接口,用于指示如何将从Kafka中消耗的ByteBuffer转换为风暴元组

它源自MultiScheme并接受Scheme类的实现

有很多Scheme类的实现,一个这样的实现是StringScheme,它将字节解析为一个简单的字符串

Public SchemeAsMultiScheme(Scheme scheme)

Scheme-----从Kafka消耗的字节缓冲区

 

KafkaSpout API

KafkaSpout是我们的spout实现,它将与Storm集成

它从kafka主题获取消息,并将其作为元组发送到Storm生态系统

KafkaSpout从SpoutConfig获取其配置详细信息


Apache Kafka 与Spark的集成

关于Spark

Spark Streaming API支持实时数据流的可扩展,高吞吐量,容错流处理。 数据可以从诸如Kafka,Flume,Twitter等许多源中提取,并且可以使用复杂的算法来处理,例如地图,缩小,连接和窗口等高级功能

最后,处理的数据可以推送到文件系统,数据库和活动仪表板

弹性分布式数据集(RDD)是Spark的基本数据结构

它是一个不可变的分布式对象集合

RDD中的每个数据集划分为逻辑分区,可以在集群的不同节点上计算

 

Spark集成

Kafka是Spark流式传输的潜在消息传递和集成平台

Kafka充当实时数据流的中心枢纽,并使用Spark Streaming中的复杂算法进行处理

一旦数据被处理,Spark Streaming可以将结果发布到另一个Kafka主题或存储在HDFS,数据库或仪表板中

下图描述了概念流程

 

 

SparkConf API

它表示Spark应用程序的配置。 用于将各种Spark参数设置为键值对。

 SparkConf 类有以下方法 -

set(string key,string value) - 设置配置变量。

remove(string key) - 从配置中移除密钥。

setAppName(string name) - 设置应用程序的应用程序名称。

get(string key) - get key

 

 

StreamingContext API

这是Spark功能的主要入口点。 SparkContext表示到Spark集群的连接,可用于在集群上创建RDD,累加器和广播变量。 签名的定义如下所示。

public StreamingContext(String master, String appName, Duration batchDuration,

   String sparkHome, scala.collection.Seq<String> jars,

   scala.collection.Map<String,String> environment)

 - 要连接的群集网址(例如mesos:// host:port,spark:// host:port,local [4])。

appName - 作业的名称,以显示在集群Web UI上

batchDuration - 流式数据将被分成批次的时间间隔

 

public StreamingContext(SparkConf conf, Duration batchDuration)

通过提供新的SparkContext所需的配置创建StreamingContext。

conf - Spark参数

batchDuration - 流式数据将被分成批次的时间间隔

 

KafkaUtils API

KafkaUtils API用于将Kafka集群连接到Spark流。 此API具有如下定义的显着方法 createStream 。

public static ReceiverInputDStream<scala.Tuple2<String,String>> createStream(

   StreamingContext ssc, String zkQuorum, String groupId,

   scala.collection.immutable.Map<String,Object> topics, StorageLevel storageLevel)

上面显示的方法用于创建从Kafka Brokers提取消息的输入流。

ssc - StreamingContext对象。

zkQuorum - Zookeeper quorum。

groupId - 此消费者的组ID。

主题 - 返回要消费的主题的地图。

storageLevel - 用于存储接收的对象的存储级别。

KafkaUtils API有另一个方法createDirectStream,用于创建一个输入流,直接从Kafka Brokers拉取消息,而不使用任何接收器。 这个流可以保证来自Kafka的每个消息都包含在转换中一次

 

Apache Kafka工具

Kafka在“org.apache.kafka.tools。"下打包的工具。 工具分为系统工具和复制工具

 

系统工具

可以使用运行类脚本从命令行运行系统工具

bin/kafka-run-class.sh package.class - - options

 

a. Kafka迁移工具 - 此工具用于将代理从一个版本迁移到另一个版本。

b. Mirror Maker - 此工具用于向另一个Kafka集群提供镜像。

c. 消费者偏移检查器 - 此工具显示指定的主题和使用者组的消费者组,主题,分区,偏移量,日志大小,所有者。

 

复制工具

Kafka复制是一个高级设计工具。 添加复制工具的目的是为了更强的耐用性和更高的可用性。 下面提到一些复制工具 -

d. 建主题工具 - 这将创建一个带有默认分区数,复制因子的主题,并使用Kafka的默认方案进行副本分配。

e. 列表主题工具 - 此工具列出了指定主题列表的信息。 如果命令行中没有提供主题,该工具将查询Zookeeper以获取所有主题并列出它们的信息。 工具显示的字段是主题名称,分区,leader,replicas,isr。

f. 添加分区工具 - 创建主题,必须指定主题的分区数。 稍后,当主题的卷将增加时,可能需要用于主题的更多分区。 此工具有助于为特定主题添加更多分区,还允许手动复制分配已添加的分区。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值