Kafka
kafka
A minor
本来无一物,何处惹尘埃
展开
-
【消息队列】五个问题详解消息中间件
1.消息中间件是什么消息队列,又叫做消息中间件。是指用高效可靠的消息传递机制进行与平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息队列模型,可以在分布式环境下扩展进程的通信(维基百科)。基于以上的描述(MQ是用来解决通信的问题),我们知道,MQ的几个主要特点:是一个独立运行的服务。生产者发送消息,消费者接收消费,需要先跟服务器建立连接。采用队列作为数据结构,有先进先出的特点。具有发布订阅的模型,消费者可以获取自己需要的消息。可以把MQ类比成邮局和邮差,他就是原创 2020-11-14 15:27:20 · 2557 阅读 · 1 评论 -
【Kafka】是什么?应用场景?架构?
1.Kafka是什么Kafka是一款分布式消息发布和订阅系统,它的特点是高性能、高吞吐量。最早设计的目的是作为LinkedIn的活动流和运营数据的处理管道。这些数据主要是用来对用户做用户画像分析以及服务器性能数据的一些监控所以kafka一开始设计的目标就是作为一个分布式、高吞吐量的消息系统,所以适合运用在大数据传输场景。所以kafka也适用于大数据处理,但这里我们只将Kafka作为分布式消息中间件,不涉及到数据流的处理2.Kafka应用场景由于kafka具有更好的吞吐量、内置分区、冗余及容错性的优原创 2020-11-14 15:35:09 · 1964 阅读 · 0 评论 -
【Kafka】基本使用:安装、集群搭建、命令操作(阿里云搭建踩坑记录)
1.Kafka安装部署1.1 单机模式1).下载kafka。https://kafka.apache.org/downloads2).安装解压。已经编译好的,直接解压就行(tar -zxvf kafka_2.11-2.0.0.tgz )3).启动zookeeper。因为kafka依赖于zookeeper来做master选举一起其他数据的维护,所以需要先启动zookeeper节点kafka内置了zookeeper的服务,所以在bin目录下提供了zk的启动和关闭脚本zookeeper-ser原创 2020-11-14 16:34:11 · 1230 阅读 · 0 评论 -
【Kafka】基本使用:Java操作Kafka(kafka-clients)
引入依赖<dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>2.0.0</version> </dependency>1.Producer1.1 同步调用public class MyKafKaProducer exten原创 2020-11-14 20:01:15 · 5469 阅读 · 2 评论 -
【Kafka】基本使用:关于Consumer的几个概念
上一篇,我们在【Kafka】基本使用:Java操作Kafka(kafka-clients)看到了使用kafka-clients去操作Kafka,但是在Consumer的那几个配置含义还不清楚,这篇我们就一起来看一下…1.enable.auto.commit消息提交主要有以下两种方式:自动提交:enable.auto.commit 可以配置自动提交时间可配合 auto.commit.interval.ms 设置自动提交频率可通过 enable.auto.commit=false关闭自动原创 2020-11-14 22:22:58 · 3410 阅读 · 0 评论 -
【Kafka】基本使用:SpringBoot整合Kafka-clinets
springboot的版本和kafka的版本,有一个对照表格,如果没有按照正确的版本来引入,那么会存在版本问题导致ClassNotFound的问题,具体参考 https://spring.io/projects/spring-kafka<dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId&g原创 2020-11-14 20:11:43 · 1139 阅读 · 0 评论 -
【Kafka】原理分析:关于Topic和Partition(分区)
1.topic在kafka中,topic是一个存储消息的逻辑概念,可认为是一个消息集合。每条消息发送到kafka集群的消息都有一个类别。每个topic可以有多个生产者向它发送消息,也可以有多个消费者去消费其中的消息2.PartitionPartition:分区。每一条消息发送到broker时,会根据partition的规则选择存储到哪一个partition。类似于分库分表的思想。每个topic可以划分多个分区(至少有一个分区),同一topic下的不同分区包含的消息是不同的单机也可以分区,只不过原创 2020-11-14 20:40:06 · 6501 阅读 · 0 评论 -
【Kafka】原理分析:Producer分发规则
消息是kafka中最基本的数据单元,在kafka中一条消息的构成(ProducerRecord类):topic:消息属于哪个消息集合value:消息具体内容key:与分区算法一起决定当前消息发送到那个partition1.默认分发规则默认情况下,kafka采用的是hash取模的分区算法。key不为null:就直接根据分区数取模key为null:则会随机分配一个分区。这个随机是在这个参数”metadata.max.age.ms”的时间范围内随机选择一个。对于这个时间段内,如果key为 n原创 2020-11-14 21:56:18 · 894 阅读 · 0 评论 -
【Kafka】原理分析:Consumer消费规则
在实际生产过程中,每个topic都会有多个partitions,多个partitions的好处在于,一方面能够对 broker上的数据进行分片有效减少了消息的容量从而提升io性能。另外一方面,为了提高消费端的消费 能力,一般会通过多个consumer去消费同一个topic ,也就是消费端的负载均衡机制。这也就是我们接下来要了解的,在多个partition以及多个consumer的情况下,消费者是如何消费消息的。同时,在【Kafka】基本使用:关于Consumer的几个概念我们说了kafka存在consum原创 2020-11-15 00:16:51 · 3631 阅读 · 0 评论 -
【Kafka】原理分析:消息的文件存储机制
消息发送端发送消息到broker上以后,消息是如何持久化的呢?那么接下来去分析下消息的存储首先需要了解的是,kafka是使用日志文件的方式来保存生产者和发送者的消息,每条消息都有一个offset值来表示它在分区中的偏移量。Kafka中存储的一般都是海量的消息数据,为了避免日志文件过大,Log并不是直接对应在一个磁盘上的日志文件,而是对应磁盘上的一个目录,这个目录的命名规则是<topic_name>_<partition_id>(如test-0)1.消息的文件存储机制一个topi原创 2020-11-15 02:50:14 · 1728 阅读 · 1 评论 -
【Kafka】原理分析:磁盘存储性能问题优化
1.顺序写现在大部分企业仍然用的是机械结构的磁盘,如果把消息以随机的方式写入到磁盘,那么磁盘首先要做的就是寻址,也就是定位到数据所在的物理地址,在磁盘上就要找到对应的柱面、磁头以及对应的扇区;这个过程相对内存来说会消耗大量时间。为了规避随机读写带来的时间消耗,kafka采用顺序写的方式存储数据,那么只用按顺序上一条消息后添加就行。但即使这样,频繁的I/O操作仍然会造成磁盘的性能瓶颈2.零拷贝消息从发送到落地保存,broker维护的消息日志本身就是文件目录,每个文件都是二进制保存,生产者和消费者使用相原创 2020-12-03 23:25:22 · 2282 阅读 · 0 评论 -
【Kafka】原理分析:分区副本机制
1.副本机制Kafka的每个topic都可以分为多个Partition,并且多个partition会均匀分布在集群的各个节点下。虽然这种方式能够有效的对数据进行分片,但是对于每个partition来说,都是单点的,当其中一个partition不可用的时候,那么这部分消息就没办法消费。所以kafka为了提高partition的可靠性而提供了副本的概念(Replica),通过副本机制来实现冗余备份。一主多从:每个分区可以有多个副本,并且在副本集合有1个leader副本,和多个follower副本组成;原创 2020-11-15 01:53:51 · 2123 阅读 · 0 评论 -
【Kafka】原理分析:详解副本协同流程
上一篇【Kafka】原理分析:分区副本机制我们介绍了什么是分区副本机制,里面提到了副本的协同,那么副本间数据同步的具体过程是什么样呢?本篇我们就一起来看看…1.Leader副本接收消息1.1 处理流程Producer在发布消息到某个Partition时,寻找Leader:先通过ZooKeeper找到该Partition的Leader get /brokers/topics/<topic>/partitions/2/state,然后无论该Topic的Replication Factor为原创 2020-11-15 02:29:11 · 22790 阅读 · 5 评论 -
【Kafka】消息可靠性保证
其实,没有一个中间件能够做到百分之百的完全可靠,可靠性更多的还是基于几个9的衡量指标,比如4个9、5 个9。软件系统的可靠性只能够无限去接近100%,但不可能达到100%。所以kafka如何是实现最大可能的可靠性呢?1.Broker的可靠性要求:消息不能丢失实现:分区副本, 可以创建更多的分区来提升可靠性副本多少:一般3个副本就能满足对大部分场景的可靠性要求,若分区数过多也会带来性能上的开销分区副本多少的问题实际就是集群中Broker数量多少的问题,因为一个Broker上只能存在一个分区的一个原创 2020-11-15 03:00:35 · 608 阅读 · 0 评论