1.初识kafka
官网:Apache Kafka
Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发并于2011年开源。它主要用于解决大规模数据的实时流式处理和数据管道问题。
Kafka是一个分布式的发布-订阅消息系统,可以快速地处理高吞吐量的数据流,并将数据实时地分发到多个消费者中。Kafka消息系统由多个broker(服务器)组成,这些broker可以在多个数据中心之间分布式部署,以提供高可用性和容错性。
Kafka的基本架构由生产者、消费者和主题(topic)组成。生产者可以将数据发布到指定的主题,而消费者可以订阅这些主题并消费其中的数据。同时,Kafka还支持数据流的处理和转换,可以在管道中通过Kafka Streams API进行流式计算,例如过滤、转换、聚合等。
Kafka使用高效的数据存储和管理技术,能够轻松地处理TB级别的数据量。其优点包括高吞吐量、低延迟、可扩展性、持久性和容错性等。
Kafka在企业级应用中被广泛应用,包括实时流处理、日志聚合、监控和数据分析等方面。同时,Kafka还可以与其他大数据工具集成,如Hadoop、Spark和Storm等,构建一个完整的数据处理生态系统。
2. 为什么要使用kafka
我们通过一个经典的kafka使用场景--》日志聚合的应用场景来分析一下kafka的的特点。知道了产品的特点,我们也就知道了为甚么要用kafka。
如下图所示,kafka可以汇集不同大量的日志,然后各系统根据所需获取对应的日志。想象一下,如果没有使用kafka,这些大量不同的日志与各个系统之间应该怎么样处理?
业务场景决定了产品的特点:
- 数据吞吐量很大: 需要能够快速收集各个渠道的海量日志。
- 集群容错性高:允许集群中少量节点崩溃。
- 功能不需要太复杂:Kafka的设计目标是高吞吐、低延迟和可扩展,主要关注消息传递而不是消息处理。所以,Kafka并没有支持死信队列、顺序消息等高级功能。
- 允许少量数据丢失:Kafka本身也在不断优化数据安全问题,目前基本上可以认为Kafka可以做到不会丢数据。
3. 单机服务搭建
1. 准备一台虚拟机
2. 安装jdk(zookeeper的运行环境是jdk8)
jdk安装可参考Linux环境下安装JDK-CSDN博客
3. 关闭防火墙(实验版本关闭防火墙,生产环境开启对应端口即可)
firewall-cmd --state 查看防火墙状态 systemctl stop firewalld.service 关闭防火墙
第一步,下载kafka
下载地址:Apache Kafka
本文章使用的是3.2.0版本
关于kafka的版本,前面的2.13是开发kafka的scala语言的版本,后面的3.4.0是kafka应用的版本。
Scala是一种运行于JVM虚拟机之上的语言。在运行时,只需要安装JDK就可以了,选哪个Scala版本没有区别。但是如果要调试源码,就必须选择对应的Scala版本。因为Scala语言的版本并不是向后兼容的。
另外,在选择kafka版本时,建议先去kafka的官网看下发布日志,了解一下各个版本的特性。 https://kafka.apache.org/downloads。 例如3.2.0版本开始将log4j日志框架替换成了reload4j,这也是应对2021年log4j框架爆发严重BUG后的一种应对方法。
第二步:.tgz文件上传到服务器且解压
第三步:启动zookeeper
下载下来的Kafka安装包不需要做任何的配置,就可以直接单击运行。Kafka的运行依赖于zookeeper,所以,接下来,启动kafka内置的zookeeper。
nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
第四步: 启动kafka
nohup bin/kafka-server-start.sh config/server.properties &
4. 如何发消息
5. 如何消费消息
6. 理解Kakfa的消息传递机制
内容完善中~