文章目录
前言
在前面的文章中《在hadoopHA节点上部署flume高可用组件 》已经介绍了flume实时收集acces.log,同时给出flume是如何实现数据流向的高可用环境测试。在后面的文章中会给出实时大数据项目的开发,实时数据源由flume sink到kafka的topic里,而不是前面提到的hdfs,目的是利用kafka强大的分布式消息组件用于分发来自flume的实时数据流。
kafka集群在Hadoop实时大数据项目的位置,如下图所示:
1、Kafka的基本介绍
1.1 什么是kafka
Kafka 是一种分布式的,基于发布/订阅的消息系统(redis也可以实现该功能),主要设计目标如下:
以时间复杂度为 O(1) 的方式提供消息持久化能力,即使对 TB 级以上数据也能保证常数时间复杂度的访问性能。
高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒 100K 条以上消息的传输。
支持 Kafka Server 间的消息分区,及分布式消费,同时保证每个 Partition 内的消息顺序传输。
同时支持离线数据处理和实时数据处理。
Scale out:支持在线水平扩展。
1.2 kafka 应用场景
- 日志收集:可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer。不过在本文中,flume用于收集数据日志,kafka组件用于接受来自flume的event
- 流式处理:spark streaming,在上面的架构图也可以清楚看到kafka组件的下游为spark streaming,它消费来自kafka topic的实时数据消息。
- 消息系统:解耦生产者和消费者、缓存消息等。
- 用户活动跟踪:kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后消费者通过订阅这些topic来做实时的监控分析,亦可保存到hbase、mangodb等数据库。
- 运营指标:kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,
- 生产各种操作的集中反馈,比如报警和报告。
可以看出kafka在大数据实时处理以及互联网产品方面应用最为突出。
1.3 kafka相关术语
-
producer : 生产者,生产message发送到topic,例如flume sink就是生产者
-
consumer : 消费者,订阅topic并消费message, consumer作为一个线程来消费,例如实时处理的spark streaming。
-
Broker:Kafka节点,一个Kafka节点就是一个broker,多个broker可以组成一个Kafka集群,在大数据项目中,直接利用已有的hadoop节点服务器配置成kafka集群。整个 Kafka 集群架构会有一个 zookeeper集群,通过 zookeeper 管理集群配置,选举 kafka Leader,以及在 Consumer Group 发生变化时进行 Rebalance。
-
topic:一类消息,消息存放的目录即主题,例如page view日志、click日志等都可以以topic的形式存在,Kafka集群能够同时负责多个topic的分发
-
massage: Kafka中最基本的传递对象。
-
partition:topic物理上的分组,一个topic可以分为多个partition,每个partition是一个有序的segment以及index:partition在物理上已一个文件夹的形式存在,由多个segment文件组成和多个index文件,它们是很对出现,每个Segment存着message信息,每个index存放着message的offset
-
replica:partition 的副本,保障 partition 的高可用。个人建议写成replica partition–副本分区
-
leader:这里的leader要理解为某个partition 作为主分区,也即称为leader partition,要注意该partition所在的服务器不能称为leader,否认会被误认为是kafka集群的master服务器(Kafka把master服务器称为controller)。 producer 和 consumer 只跟 leader petition交互。
-
replicas:leader 角色的partition加上replica角色的partition,一起成为replicas,也就是该topic总共有多少个副本数,副本数包含一个主分区副本和其余的副本分区。
-
controller:为了避免更leader这个词混淆,开发者将kafka 集群中的其中一台服务器称为controller,用于对每个topic的partition leader选举以及实现对partition的failover。
-
consumer Group:消费者组,一个Consumer Group包含多个consumer
-
offset:偏移量,理解为消息partition中的索引
2、kafka 单点部署与测试
2.1 配置文件
目前官方kafka最新稳定版本为2.3.1
按官方建议以下建议,项目用到scala2.1.3,kafka用了官方的建议版本2.1.2
We build for multiple versions of Scala. This only matters if you are using Scala and you want a version built for the same Scala version you use. Otherwise any version should work (2.12 is recommended).
kafka组件同样被放置在/opt目录下,该目录放置所有Hadoop及其组件,便于统一管理
[root@nn opt]# ls
flume-1.9.0 hbase-2.1.7 kafka-2.12 scala-2.13.1
flume_log hive-3.1.2 mariadb-10.4.8 spark-2.4.4-bin-hadoop2.7 zookeeper-3.4.14
hadoop-3.1.2 jdk1.8.0_161 xcall.sh
配置server.properties。
[root@nn config]# vi ser