Kafka介绍

简介: Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,作为消息中间件来说都起到了系统间解耦、异步、削峰等作用,同时又提供了Kafka streaming插件包在应用端实现实时在线流处理,它可以收集并处理用户在网站中的所有动作流数据以及物联网设备的采样信息

什么是Kafka

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。

Kafka是一种高吞吐量的分布式发布订阅消息系统,作为消息中间件来说都起到了系统间解耦、异步、削峰等作用,同时又提供了Kafka streaming插件包在应用端实现实时在线流处理,它可以收集并处理用户在网站中的所有动作流数据以及物联网设备的采样信息。

特性

高吞吐

kafka高吞吐表现以下几点:

  1. Topic分区

    • 同一个Topic的多个分区同时写入消息/多个消费者同时间消费不同分区消息
    • 不保证全局FIFO
    • 集群环境中的数据分布均匀
  2. 顺序IO

    • 顺序IO读写操作的访问地址连续,减少寻址时间
    • 随机IO读写操作时间连续,访问地址不连续
  3. 内存映射(memory Map File)

    • 当CPU读取数据时,是由内存管理单元(MMU)管理的。
    • 内核空间PageCache->磁盘(操作系统决定何时刷新)断电丢数据
  4. 零拷贝

    直接将数据从内核空间传递输出

    • 零拷贝:磁盘->内核内存->socket buffer(内核态)->网络
    • 常规copy:磁盘->内核内存->应用->socket buffer->网络
    • 常规io:用户空间系统调用->CPU IO读取->硬盘->写入磁盘缓冲->CPU将缓冲拷贝内核缓冲->返回用户空间。全程阻塞
    • DMA:用户空间系统调用->CPU IO读取->DMA IO读取->硬盘->写入磁盘缓冲->DMA将缓冲拷贝内核缓冲->通知CPU->返回用户空间。CPU不阻塞

Topic分区

  • 可以指定一个Topic中有多少分区
  • 可以指定生产/消费某个分区消息(默认轮询)

生产者

  • 可以指定分区生产消息
  • 拦截器:生产者生产消息时可做全局拦截,对消息进行统一处理
  • 幂等:生产消息生成唯一标识,分区中存在唯一标识则拒绝
  • 事务:事务保证幂等性,保证多个分区的数据原子性

消费者

  • 消费者用一个消费组标记自己,同一个topic相同消费组轮询读取,不同消费组同时读取,消费者多余分区则会空闲
  • 消费者定期(可配置)提交偏移量,也可手动提交偏移量
  • latest(读取最新偏移量) earliest(如果系统没有消费者的偏移量,读取该分区最早的偏移量)none(异常)
  • 可设置偏移量开始读取

集群

集群角色

角色 作用
Leader 负责分区的读写
Follower 负责同步数据

副本备份(数据同步)

  • LEO(last end offset):每个副本都有一个 log end offset,标识分区最后一条消息的下一个位置。
  • HW(高水位线):所有在HW之前的数据都已经备份成功

​ 0.10版本

​ 数据丢失: brokerA(副本)HW为0,brokerB(Leader)HW为1,brokerA重启未同步HW至1,重启后重新向brokerB同步,此时brokerB也断电重启,选举Leader为brokerA后数据回到HW为0的数据造成丢失

​ 数据不一致:brokerA(副本)HW为0,brokerB(Leader)HW为1,同时宕机,重启后brokerA为Leader,写入数据后HW为1,此时brokerB启动成功后同步brokerA HW,HW一致不同步数据。

​ 两者问题都是由于Leader宕机导致

​ 0.11版本解决以上两个问题

​ 引入Leader Epoch,每个分区有Leader Epoch Seq。所谓leader epoch实际上是一对值:(epoch,offset)。epoch表示leader的版本号,从0开始,当leader变更过1次时epoch就会+1,而offset则对应于该epoch版本的leader写入第一条消息的位移。因此假设有两对值:

(0, 0)

(1, 120)

则表示第一个leader从位移0开始写入消息;共写了120条[0, 119];而第二个leader版本号是1,从位移120处开始写入消息。

leader broker中会保存这样的一个缓存,并定期地写入到一个checkpoint文件中。

当leader写底层log时它会尝试更新整个缓存——如果这个leader首次写消息,则会在缓存中增加一个条目;否则就不做更新。而每次副本重新成为leader时会查询这部分缓存,获取出对应leader版本的位移,这就不会发生数据不一致和丢失的情况。

基本命令

创建Topic

./bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic topicbg --partitions 3 --replicatioon-factor 1

启动一个消费者

./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topicbg --group groupbg

启动一个生产者

./bin/kafka-console-producer.sh --broker-list localhost:9092 --topic topicbg

插件

kafka管理界面:kafka-eagle

相关文章
|
数据采集 机器学习/深度学习 自然语言处理
数据清洗与过滤
【10月更文挑战第6天】数据清洗与过滤
232 1
|
安全 Java 数据安全/隐私保护
APP加固技术及其应用
在移动应用开发过程中,APP加固技术起到了非常重要的作用。APP加固是将apk文件进行混淆加密,以防止别人反编译获取我们的源码和资源文件。目前市场上主流的APP加固公司有三家,分别是梆梆加固、360加固和ipagurd加固。本文将介绍APP加固的概念、加固方案和比较,并探讨APP加固在实际开发中的应用。
APP加固技术及其应用
|
6月前
|
机器学习/深度学习 人工智能 关系型数据库
通义 CoGenAV 大模型音画同步感知,重新定义语音理解边界
CoGenAV 是一种创新的多模态语音理解模型,核心理念是实现“音画同步”的深度理解。通过学习 audio-visual-text 的时序对齐关系,构建更鲁棒、更通用的语音表征框架。它在视觉语音识别(VSR)、音视频语音识别(AVSR)、语音增强与分离(AVSE/AVSS)及主动说话人检测(ASD)等任务中表现出色,尤其在嘈杂环境下性能显著提升。仅需 223 小时数据训练即可媲美传统数千小时数据的效果,大幅降低训练成本。CoGenAV 支持主流平台如 GitHub、HuggingFace 和 ModelScope,助力多场景应用开发。
627 10
取消 IDEA项目结构后 100% classes, 100% lines covered 的展示
在Idea,使用快捷键`Ctrl+Alt+F6` 去掉 `Choose Coverage Suite to Display`对话框的勾选项即可。
508 6
取消 IDEA项目结构后 100% classes, 100% lines covered 的展示
|
消息中间件 存储 中间件
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
【消息中间件】详解三大MQ:RabbitMQ、RocketMQ、Kafka
11967 1
|
XML Java 关系型数据库
Spring Boot 异常处理回滚事务详解(自动回滚、手动回滚、部分回滚)
Spring Boot 异常处理回滚事务详解(自动回滚、手动回滚、部分回滚)
3830 0
|
人工智能
给RAG系统做一次全面体检,亚马逊开源RAGChecker诊断工具
【9月更文挑战第12天】近年来,检索增强生成(RAG)系统因能有效利用外部知识而备受关注,但其评估仍具挑战性。为此,亚马逊AWS AI和上海交大的研究团队提出了RagChecker,这是一种细粒度评估框架,通过主张级别蕴涵检查来诊断RAG系统的检索和生成模块。RagChecker包含整体、诊断检索器和诊断生成器指标,全面评估系统性能。研究表明,RagChecker与人类判断相关性更高,并揭示了RAG架构设计的关键模式。尽管如此,该方法在计算资源和系统可解释性方面仍有局限。
372 3
|
JavaScript
vue常用跳转方式大全,vue站内跳转和打开新页面跳转
vue常用跳转方式大全,vue站内跳转和打开新页面跳转
1512 1
|
SQL 缓存 监控
MySQL慢查询:慢SQL定位、日志分析与优化方案,真心不错!
MySQL慢查询:慢SQL定位、日志分析与优化方案,真心不错!
MySQL慢查询:慢SQL定位、日志分析与优化方案,真心不错!
|
存储 分布式计算 Hadoop
ClickHouse(01)什么是ClickHouse,ClickHouse适用于什么场景
ClickHouse是一款高性能的列式存储OLAP数据库,由俄罗斯的Yandex公司开发,用于在线分析处理(OLAP)。它提供秒级大数据查询,适用于商业智能、广告流量等领域。ClickHouse速度快的原因包括列式存储、数据压缩、向量化执行和多线程分布式处理。然而,它不支持事务,不适合OLTP操作。相比Hadoop生态中的查询引擎,ClickHouse在大量数据查询上表现出色。一系列的文章详细介绍了ClickHouse的各个方面,包括安装、表引擎和使用场景。
2309 2
ClickHouse(01)什么是ClickHouse,ClickHouse适用于什么场景