kafka初识

一.概述

  • 定义
    • kafka是一种高吞吐量的分布式,支持分区,多副本,基于zookeeper协调的消息队列.
  • 新版本变化
    • 从0.10及之后,kafka定位于分布式事件流处理平台,不再是简单的是消息系统.
  • 学习使用的版本
    • 2.0.0
    • 在0.10之前是没有kafka Streams的
    • 1.x之后不断的优化了kafka的bug修复能力和kafka Stream编程

二.特点

  • 稳定性高
    • 数据类似数组的顺序存储,时间复杂度是o(1),在面对大量数据时稳定性很高
  • 高吞吐,低延迟
    • 即使很普通的硬件,每秒也支持百万条数据的处理
    • 延迟只有几毫秒
  • 高并发
    • 支持数千个客户端同时读写
  • 容错性好
    • 消息的负载均衡存储和消费
    • 支持通过Kafka服务器集群来分区存储、分布式消费消息的机制
    • 支持hadoop的并行计算
    • 支持hadoop并行数据加载

三.应用场景

  • 做MQ(消息队列),为系统解耦
    • 爬虫数据推送,任务分发等
    • 日志的收集存储
  • 做流处理程序
    • 对流数据进行转换或者其他操作

四.相关术语

  • message
    • 消息,所有在kafka处理的数据统称为消息,消息从生产者生产,然后推送到kafka中,再由消费者消费,所以kafka也叫消息队列 message queue MQ
  • broker
    • 中间人,kafka集群中的服务器,他们用来存储和处理message
  • topic
    • 主题,就是给消息分个类,便于大量数据的统一处理
    • 一般同一个topic的数据会存储在同一个broker上,不同的topic的消息是分开存储的,我们只需要给消息指定一个topic即可,不需要具体的关系消息的存储位置
  • partition
    • 分区,这是一个物理上的概念,每个topic都有一个或者多个partition
    • 默认的每个partition均会有3个副本,可手动修改
  • segment
    • 片段,每个partition由一个或者多个segment组成,每个segment存储着多条message是对partition的进一步细分
    • segment作用
      • 减少单个partition文件太大不好管理的问题,加快了message的查询
      • 查询数据时,定位broker–>定位partition–>定位segment–>利用索引和日志快速定位消息
  • producer
    • 生产者,产生消息,然后将消息发送到消息队列
  • consumer
    • 消费者,从消息队列中获取消息
  • publish
    • 发布,即发布消息,将消息发送到消息队列
  • subscribe
    • 订阅,消费者提前预定需要消息的topic,一旦该topic有最新的消息,会唤醒对应消费者消费数据
  • consumer group
    • 消费者组,一组具有相同特性的消费者的集合
    • 可以给每个消费者指定一个组,如果没有指定,那么就会放到默认的组
    • 一组中的消费者共享订阅的topic,但是每一条消息仅会被一个消费者消费
  • offset
    • 偏移量,分区中的每一条消息都有一个唯一的id,称之为offset,分区中的每一条消息都有她唯一标识
  • 消息系统中的一般性语义说明
    • 三种语义(适用于生产者和消费者两大场景)
      • 最多一次(at most once)
        • 消息可能丢失,但是不会重复投递
      • 最少一次(at least once)
        • 消息不会丢失,但可能会重复
      • 严格一次(exactly once或者exactly once semantic简称EOS)
        • 消息不丢失,不重复,仅会分发一次
  • 生产者场景
    • 最多一次
      • producer生产数据后向broker发送,broker不回复ACK,即使数据在传输过程中丢失,那也不会重新发送
    • 最少一次
      • producer生产数据想broker发送,broker收到数据后回复ACK,生产者收到ACK后就不会再次发送数据
      • 但是如果由于网络原因,producer没有收到ACK,那么就会重复发送数据
    • 严格一次
      • producer生成数据有且仅有一次成功发送到broker
        • 实现方法
          • 幂等性
            • 定义
              • 完全相同的操作,有且仅有一次真正生效,而且不会由于多次产生负作用
            • kafka场景
              • 在kafka中,由于网络原因导致的数据多次发送,无论多少条,仅会有一条发送成功
            • 实现方式
              • 通过引入了ProducerID,Sequence Number来支持幂等性
          • 分布式事物
            • 通过事务来实现生成者写入数据的原子性操作
            • 事务的四大特性
              • Atom : 原子性
              • Consistency : 一致性
              • lsolated : 隔离性
              • durablity : 持久性
  • 消费者场景
    • 最多一次
      • consumer读取到数据后,先提交offset确消费记录,然后再处理数据
      • 如果在提交了offset后,消息处理的过程中出现了异常,那么这条消息就永远不会被处理了
    • 最少一次
      • consumer首先读取数据,然后处理数据,最后提交offset
      • 如果数据在处理的过程中发送异常,那么会提交失败的ACK,consumer会重新消费该数据
      • 但是如果数据处理成功了,由于网络原因没有正常提交offset,那么consumer会重复消费该数据
    • 严格一次
      • 分两个阶段,成功读取,成功消费
      • consumer首先读取到数据后,先提交offset告知以broker已读取一次消息
      • 等待消息成功处理后,再提交一次消费成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mizui_i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值