Flume(三)之Flume与kafka(kafka简介及安装)

Flume(三)之Flume与kafka(kafka简介及安装)

1. 前言

​ Kafka是最初由Linkedin公司开发,是一个分布式、支持分区的(partition)、多副 本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以 实时的处理大量数据以满足各种需求场景:比如基于hadoop的批处理系统、低延迟 的实时系统、storm/Spark流式处理引擎,web/nginx日志、访问日志,消息服务 等等,用scala语言编写,Linkedin于2010年贡献给了Apache基金会并成为顶 级开源 项目。

2. 介绍

2-1 Kafka的特性:

​ 高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒,每个topic可以分多个partition, consumer group 对partition进行consume操作。

​ 可扩展性:kafka集群支持热扩展

​ 持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失

​ 容错性:允许集群中节点失败(若副本数量为n,则允许n-1个节点失败)

​ 高并发:支持数千个客户端同时读写

2-2 Kafka的使用场景:

**日志收集:**一个公司可以用Kafka可以收集各种服务的log,通过kafka以统			一接口服务的方式开放给各种consumer,例如hadoop、Hbase、Solr等。

​ **消息系统:**解耦和生产者和消费者、缓存消息等。

​ **用户活动跟踪:**Kafka经常被用来记录web用户或者app用户的各种活动, 如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka 的topic中,然后订阅者通过订阅这些topic来做实时的监控分析,或者装载 到hadoop、数据仓库中做离线分析和挖掘。

​ **运营指标:**Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的 数据,生产各种操作的集中反馈,比如报警和报告。

**流式处理:**比如spark streaming和storm

事件源

3. 基本工作原理图

在这里插入图片描述

4. 名词解释

Kafka中发布订阅的对象是topic。我们可以为每类数据创建一个topic,把向topic发布消息的客户端称作producer,从topic订阅消息的客户端称作consumer。Producers和consumers可以同时从多个topic读写数据。一个kafka集群由一个或多个broker服务器组成,它负责持久化和备份具体的kafka消息。

Broker:Kafka节点,一个Kafka节点就是一个broker,多个broker 可以组成一个Kafka集群。

Topic:一类消息,消息存放的目录即主题,例如page view日志、click 日志等都可以以topic的形式存在,Kafka集群能够同时负责多 个topic的分发。

Partition:topic物理上的分组,一个topic可以分为多个partition, 每个partition是一个有序的队列

Segment:partition物理上由多个segment组成,每个Segment存 着message信息

Producer : 生产message发送到topic

Consumer : 订阅topic消费message, consumer作为一个线程来消费

Consumer Group:一个Consumer Group包含多个consumer, 这个是预先在配置文件中配置好的。各个consumer(consumer 线程)可以组成一个组(Consumer group ),partition中的每个message只能被组(Consumer group ) 中的一个consumer(consumer 线程 )消费,如果一个message可以被多个consumer(consumer 线程 ) 消费的话,那么这些consumer必须在不同的组。Kafka不支持一个partition中的message由两个或两个以上的consumer thread来处理,即便是来自不同的consumer group的也不行。它不能像AMQ那样可以多个BET作为consumer去处理message,这是因为多个BET去消费一个Queue中的数据的时候,由于要保证不能多个线程拿同一条message,所以就需要行级别悲观所(for update),这就导致了consume的性能下降,吞吐量不够。而kafka为了保证吞吐量,只允许一个consumer线程去访问一个partition。如果觉得效率不高的时候,可以加partition的数量来横向扩展,那么再加新的consumer thread去消费。这样没有锁竞争,充分发挥了横向的扩展性,吞吐量极高。这也就形成了分布式消费的概念。

5. 安装步骤

配置环境变量:

vi /etc/profile

export KAFKA_HOME=/opt/soft/kafka211
export PATH=$PATH:$KAFKA_HOME/bin

  1. 首先前置安装zookeeper(步骤见zookeeper)

  2. 解压kafka(这里使用的是kafka2.11_2.0.0.tgz)

  3. 配置config/server.properties

    3.1 如果是分布式环境则需要修改broker.id的编号不能相同

    3.2 log.dir是存储数据的位置需要指定(不是日志)

    3.3 Zookeeper.connect=你的zookeeper的IP:2182(多个用逗号隔开)

  4. 启动步骤

首先启动zookeeper(集群,如果有)

其次编写启动kafka的脚本(例如:kafka.sh)让kafka在后台启动

nohup kafka-server-start.sh /opt/kafka211/config/server.properties > kafka.log 2>&1 &

6. 环境测试

  1. 建立topic(消息队列)

​ kafka-topics.sh --create \

​ --zookeeper 你的zookeeper的IP:2181 \

​ --replication-factor 副本数 \

​ --partitions 分区数 \

​ --topic 消息队列名

  1. 检查队列是否创建成功

    kafka-topics.sh --zookeeper 你的zookeeper的IP:2181 --list

  2. 向你的消息队列中生产消息

    kafka-console-producer.sh --topic 队列名 \

    –broker-list 你的kafka队列的机器IP:9092 \

  3. 消费消息

    kafka-console-consumer.sh --bootstrap-server 你的kafka的IP:9092 \

    –topic 队列名

实例操作

#创建kafka-topic
kafka-topics.sh 
--create 
--zookeeper 192.168.56.120:2181 
--topic demo 
--replication-factor 1 
--partitions 1

#配置Flume连接kafka配置文件conf_0806_kafka.properties
a5.channels=c5
a5.sources=s5
a5.sinks=k5

a5.sources.s5.type=spooldir
a5.sources.s5.spoolDir=/opt/retail_db-csv
#正则过滤表头
a5.sources.s5.interceptors=head_filter
a5.sources.s5.interceptors.head_filter.type=regex_filter
a5.sources.s5.interceptors.head_filter.regex=^event_id.*
a5.sources.s5.interceptors.head_filter.excludeEvents=true

a5.sinks.k5.type=org.apache.flume.sink.kafka.KafkaSink
a5.sinks.k5.kafka.bootstrap.servers=192.168.56.120:9092
a5.sinks.k5.kafka.topic=demo


a5.channels.c5.type=memory
a5.channels.c5.capacity=10000
a5.channels.c5.transactionCapacity=10000

a5.sinks.k5.channel=c5
a5.sources.s5.channels=c5

#消费数据(窗口1)
kafka-console-consumer.sh --bootstrap-server 192.168.56.101:9092 --from-beginning --topic demo

#执行conf_0806_kafka.properties(窗口2)
flume-ng agent -n a5 -c conf -f /opt/flumeconf/conf_0806_kafka.properties 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值