一、快速了解kafka
1、MQ的作用
MQ:MessageQueue,消息队列。队列,是一种FIFO先进先出的数据结构。消息则是跨进程传递的数据。一个典型的MQ系统,会将消息由生产者发送到MQ进行排队,然后根据一定的顺序交由消息的消费者进行处理。QQ和微信就是典型的MQ,最不过其对接的使用对象是人,而kafka需要对接的使用对象是应用程序。
MQ的主要作用主要有以下三个方面:
异步:
举例:快递员发快递,直接到客户家效率会很低,引入菜鸟驿站之后,快递员只需要把快递放到菜鸟驿站,就可以继续发其他快递去了,客户再按照自己的时间安排去菜鸟驿站取快递。
作用:异步能提高系统的响应速度、吞吐量。
解耦:
例子:《Thinking in JAVA》很经典,但都是些英文,不容易读懂,所以需要编辑社,将文章翻译成其他语言,这样就可以完成英语与其他语言的交流。
作用:
1. 服务之间进行解耦,才可以减少服务之间的影响。提高系统整体的稳定性以及可扩展性。
2. 解耦后可以实现数据分发,生产者发送一个消息后,可以由一个或者多个消费者进行消费,并且消费者的增加或者减少对生产者没有影响。
削峰:
例子:长江每年都会涨水,但是下游出水口的速度是稳基本定的,所以会涨水。引入三峡大坝后,可以把水储存起来,下游慢慢排水。
作用:以稳定的系统资源应对突发的流量冲击。
2、kafka产品介绍
官网地址:Apache Kafka
Apache Kafka最初由LinkedIn开发并于2011年开源,主要解决大规模数据的实时流式处理和数据管道问题。
kafka是一个分布式的发布-订阅消息系统,可以快速地处理高吞吐量的数据流,并将数据实时地分发到多个消费者中。kafka消息系统有多个broker(服务器)组成,这些broker可以在多个数据中心之间分布式部署,以提供高可用性和容错性。
kafka使用高效的数据存储和管理技术,能够轻松地处理TB级别的数据量。其优点包括高吞吐量、低延迟、可扩展性、持久性和容错性等。
kafka在企业级应用中被广泛应用,包括实时流处理、日志聚合、监控和数据分析等方面。同时,kafka还可以与其他大数据工具集成,如Hadoop、Spark、Storm等,构建一个完整的数据处理生态系统。
3、kafka的特点
kafka最初诞生于LinkedIn公司,其核心作用就是用来收集并处理庞大复杂的应用日志。一个典型的日志聚合应用场景如下:
业务场景决定了产品的特点。所以kafka最典型的产品特点有以下几点:
1. 数据吞吐量很大:需要能够快速收集各个渠道的海量日志
2. 集群容错性高:允许集群中少量节点崩溃
3. 功能不需要太复杂:kafka是设计目标是高吞吐、低延迟和可扩展,主要关注消息传递而不是消息处理。所以,kafka并没有支持死信队列、顺序消息等高级功能。
4. 允许少量数据丢失:在海量的应用日志中,少量的日志丢失是不会影响结果的。所以kafka的设计初衷是允许少量数据丢失的。当然kafka本身也在不断优化数据安全问题。
二、快速上手kafka
1、快速搭建单机服务
kafka的运行环境非常简单,只要有JVM虚拟机就可以进行。以下以安装了JDK1.8的CentOS为例。
前提:安装jdk1.8
下载kafka:
下载地址:Apache Kafka
关于kafka的版本,前⾯的2.13是开发kafka的scala语⾔的版本,后⾯的3.8.0是kafka应⽤的版本。 Scala是⼀种运⾏于JVM虚拟机之上的语⾔。在运⾏时,只需要安装JDK就可以了,选哪个Scala版本没有区别。但是如果要调试源码,就必须选择对应的Scala版本。因为Scala语⾔的版本并不是向后兼容的。
下载zookeeper:
下载地址:Apache ZooKeeper
Zookeeper的版本并没有强制要 求,这里选择了3.8.4版本。
安装过程记录:
通过以下命令分别将三个工具包解压到 /usr/local 路径下
tar -zxvf jdk-8u171-linux-x64.tar.gz -C /usr/local
tar -zxvf kafka_2.13-3.8.0.tgz -C /usr/local
tar -zxvf apache-zookeeper-3.8.4.tar.gz -C /usr/local
kafka的安装程序中⾃带了Zookeeper,可以在kafka的安装包的libs⽬录下查看到zookeeper的客户端jar 包。但是,通常情况下,为了让应⽤更好维护,我们会使⽤单独部署的Zookeeper,⽽不使⽤kafka⾃带 的Zookeeper。
启动Kafka之前需要先启动Zookeeper 这⾥就⽤Kafka⾃带的Zookeeper。启动脚本在bin⽬录下。
首先进入kafka的目录,然后启动zookeeper服务:
nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
nohub:程序执行的时候不占用控制台,让其后台启动
注意下脚本是不是有执⾏权限。 从nohup.out中可以看到zookeeper默认会在2181端⼝启动。通过jps指令看到⼀个QuorumPeerMain进程,确定服务启动成功。
启动Kafka
nohup bin/kafka-server-start.sh config/server.properties &
启动完成后,使⽤jps指令,看到⼀个kafka进程,确定服务启动成功。服务会默认在9092端⼝启动。
至此,服务启动完成。
2、理解kafka的消息
简单收发消息:
Kafka的基础⼯作机制是消息发送者可以将消息发送到kafka上指定的topic,⽽消息消费者,可以从指定的 topic上消费消息。
创建topic:
kafka的bin目录做了大量的封装。