Kafka的相关知识

Kafka

1.定义

一种高吞吐量的分布式、支持分区、多副本的,基于zookeeper协调的消息系统

2.特性

稳定性高
	通过O(1)的磁盘数据结构提供消息的持久化,这种结构就算是TB以上级别的消息存储都能够保持长	时间的稳定性能
高吞吐量、低延迟
	普通的硬件Kafa也可以支持每秒数百万的消息
	延迟最低只有几毫秒
高并发
	支持数千个客户端同时读写
容错性好
	消息的负载均衡的存储与消费
	支持通过kafka服务器集群来分区存储、分布式消费消息的机制.
良好支持hadoop并行计算
	支持Hadoop并行数据加载

3.组件介绍
1.Message
俗称消息,是Kafka集群到账存储的真正的实体数据.
由数据源push到Kafka集群,然后消费者角色从Kafka拉取(pull)消费数据的统称.
2.Broker
Kafka集群包含一个或多个服务器,这种服务器统一被称为broker,即中间人,和事佬.
3.Topic
每条push到集群的消息都有一个主题(类),这个类别被称为Topic,相当于给这类消息放进的一个管道,并且可以给它起个名字.
4.Partition
Partition是物理上的概念,每个Topic存在于一个或多个Partition中,或者说包含多个Partition.
5.Segment
Partition物理上由多个segment组成,每个segment都存有message信息.
Partition文件分Segment管理,减少单个文件太大的问题,并方便更快速定位Message在哪个Segment中.
定位Segment后,课根据Segment对应的index索引和message log 日志文件快速定位和读取相应message消息.
6.Producer
生产者,负责发布消息到Kafka broker.
7.Consumer
消息消费者,向Kafka broker读取消息的客户端
8.发布 publish和订阅 subscribe
发布消息,即生产消息,将生产出来的消息加入到MQ当中.
订阅消息,由消费者主动提前定义订阅消息的Topic名称,如果该Topic类中的消息有新增,则会主动通过消费者线程,此时消费者线程进入消息的处理过程.
9.Consumer Group
每个Consumer属于一个特定的Consumer Group
可为每个Consumer指定group name,若不指定group name 则属于默认的group
每个Group共享订阅的Topic消息,但是这个topic中的每个消息只会被这个group中的一个consumer消费.(类似于几个人都关注喜欢了一个女同学,但是只能嫁给一个人)
10.Offset
即为偏移量.分区中的消息,都会有一个递增的id,成为offset,是分区中消息的唯一标识.

4.消息系统的语义
三种语义:最多一次,最少一次,严格一次
最多一次:消息可能丢失,但是不重复提交
最少一次:消息不会丢失,但是可能重复提交
严格一次:消息不丢失,不重复,只会被分发一次

生产者语义剖析
最多一次:
1.producer产生数据后,有可能数据没有写成功(比如,只管写入,不确认应答消息)
2.这时broker跳过这个发送失败的消息,该数据就会丢失,导致consumer无法消费
最少一次:
1.producer产生数据后已经写入成功到Kafka broker集群
2.但是broker出现异常,没有返回应答消息
3.此时producer会认为数据没有写入成功,会再次写入,此时相当于写入重复.
严格一次:
生产者只有一次将消息成功发送给Broker
这种情况是精准生产一次.
该语义实现方法:
1.幂等性:
定义:多次完全相同的操作,只会有一次真正生效,并且不回因为多次做重复操作产生副作用.
Kafka实现方式:通过引入ProducerID及Sequence Number支持幂等性,保证精确语义.
2.分布式事务:
通过分布式事务实现生产写入的原子性操作
事务的4大特性:
Atom:原子性
Consistency:一致性
lsolated:隔离性
Durablity:持久性

消费者语义剖析
最多一次:
1.消费者先读取数据,然后提交offset确认消费记录,最后处理数据
2.如果在提交offset成功后,还没有及时的处理数据,就异常了,然后新的consumer继续从这个offset处理,这个数据永远不会被处理.
最少一次(默认):
1.消费者先读取数据,然后处理数据,最后提交offset确定消费.
2.如果在提交offset之前就异常退出,则确定消费的确认失败,则新的consumer会重复的来消费这条数据
严格一次:
1.消费者通过将提交分成两个阶段
2.先读取数据后,先提交offset确认已读取消息一次等待处理,然后消息处理成功后,再提交一次确认消费成功一次.
Kafka Streams模块也实现了该语义功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值