kafka学习笔记

一,kafka概述

1.1定义

kafka是一个分布式的基于发布/订阅模式(publish/subscibe)又叫观察者模式(Observer)的消息队列,主要应用于大数据实时处理领域。

一.异步通信原理

1.1观察者模式

  • 观察者模式(observer),又叫发布-订阅模式(publish/subscribe)
  • 定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于他的对象都会得到通知并自动更新。
  • 一个对象(目标对象)的状态发生改变,所有的依赖对象(观察者对象)都将得到通知。

1.2生产者消费者模式

  • 传统模式

                生产者直接将消息传递给指定的消费者

                耦合性特别高,当生产者或者消费者发生变化,则需要重写业务逻辑

  • 生产者消费者模式

                通过一个容器解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过组塞队列来进行通讯。

                

  • 数据传递流程

                生产者消费者模式,即 n个线程进行生产,同时n个线程进行消费两种角色通过内存缓冲区进行通信。

                生产者负责向缓冲区里面添加数据单元

                消费者负责从缓冲区里面取出数据单元(一般遵循先进先出原则)

1.3缓冲区

  • 解耦

                假设生产者和消费者分别是两个类。如果让生产者直接调用消费者的某个方法,那么生产者对于消费者就会产生依赖

  • 支持并发

  • 支持忙闲不均

1.4数据单元

  • 关联到业务对象
  • 完整性
  • 独立性
  • 颗粒度

二.消息系统原理

一个消息系统负责将数据从一个应用传递到另一个应用,应用只需要关注于数据,无需关注数据在两个或者多个应用间是如何传递的。

2.1点对点消息传递

        在点对点消息系统中,消息持久化到一个队列中。此时,将有一个或多个消费者消费队列中的数据。但是一条消息只能被消费一次

        当一个消费者消费了队列中的某条数据之后,该条数据则从消息队列中删除。

        该模式即使有多个消费者同时消费数据,也能保证数据处理的顺序。

        基于推送模型的消息系统,由消息代理记录消费状态。

                消息代理将消息推送(push)到消费者后,标记这条消息为已经被消费,但是这种方式无法很好地保证消费的处理语义。

2.2发布订阅消息传递

        在发布-订阅消息系统中,消息被持久化到一个topic中。
        消费者可以订阅一个或多个topic消费者可以消费该topic中所有的数据,同一条数据可以被多个消费者消费,数据被消费后不会立马删除。
        在发布-订阅消息系统中,消息的生产者称为发布者,消费者称为订阅者。
        Kafka采取拉取模型(Poll),由自己控制消费速度,以及消费的进度,消费者可以按照任意的偏移量进行消费。

3.kafka简介

        官网:http://kafka.apache.org/
        Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。

3.1 设计目标

  • 以时间复杂度O(1)的方式提供消息持久化能力,即使对tb级以上数据也能保证常数时间的访问性能
  • 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100k条消息的传输。
  • 支持kafka server间的消息区分,及分布式消费,同时保证每个partition内的消息顺序传输
  • 同时支持离线数据处理和实时数据处理。
  • 支持在线水平扩展。

3.2 kafka的优点

解耦

冗余

扩展性

灵活性 峰值处理能力

可恢复性

顺序保证

缓冲

异步通信

4. kafka系统框架

4.1 broker

kafka集群包含一个或多个服务器,服务器节点成为broker.

4.2 topic

每条发布到kafka集群的消息都有一个类别,这个类别被称为topic

类似于数据库表的表名或者es的index

物理上不同topic的消息分开存储

逻辑上一个topic的消息虽然保存于一个或多个broker上但用户只需指定消息的topic即可生产或消费数据而不必关心数据存于何处

创建流程

4.3partition

topic 中的数据可分为一个或多个partition

每个topic至少有一个partition,当生产者产生数据的时候,根据分配策略,选择分区,然后将消息追加到指定的分区的末尾(队列)

##Partition数据路由规则
1.指定了partition,则直接使用
2.未指定partition,但指定key,通过对key的value进行hash选出一个partition
3,未指定partition和key,使用轮询选出一个partition

每条消息都会有一个字增的编号

  • 标识顺序
  • 用于标识消息的偏移量

每个partition中的数据使用多个segment文件存储。

partition中的数据是有序的,不同的partition间的数据丢失了数据的顺序

如果topic有多个partition,消费数据时就不能保证数据的顺序。严格保证消息的消费顺序的场景下,需要将partition数目设置为1

4.4leader

4.5 follower

4.6 replication

4.7

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值