Kafka基本概念

  • Producer: 消息和数据的生产者,向kafka的一个topic发布消息的进程、代码、服务。
  • Consumer:消息和数据的消费者,订阅数据并且处理器发布的消息的进程、代码、服务。
  • Consumer Group:逻辑概念,对于同一个topic,会广播给不同的group,一个group中,只有一个consumer可以消费该消息。
  • Broker:物理概念,kafka集群中每个kafka节点
  • topic:逻辑概念,kafka消息的类别,对数据进行区分,隔离
  • Partition:分区,物理概念,kafka下数据存储的基本单元,一个topic数据,会被分散存储到多个Partition,每一个Partition是有序的。

    1. 每一个Topic被切分为多个Partitions

    2. 消费者数目小于或等于Partition的数目

    3. Broke Group中的每个Broke保存Topic的一个或多个Partitions

    4. Consumer Group中有且仅有一个Consumer读取Topic的一个或多个Partitions,并且是唯一的Consumer。
  • Replication:副本,同一个Partition可能会有多个Replica,多个Replica之间数据是一样的。

    1. 当集群中有Broker挂掉的情况,系统可以主动使Replicas提供服务。

    2. 系统默认设置每一个Topic的Replication系数为1,可以在创建Topic时单独设置。

    3. Replication的基本单位是Topic的Partition。

    4. 所有的读和写都是Leader进,Followers只是作为备份。

    5. Follower必须能够及时复制Leader的数据。

    6. 增加容错性和可拓展性。
  • Replication Leader:一个Partition的多个Replica上,需要一个Leader负责该Partition上与Producer和Consumer交互,一个Partition有且只有一个Leader。
  • RepliceManager:负责管理当前broker的所有分区和副本的信息,处理kafkaController发起的一些请求,副本状态的切换、添加/读取消息等

kafka基本结构

kafka消息结构:

kafka的特点

分布式

  1. 多分区
  2. 多副本
  3. 多订阅者
  4. 基于ZooKeeper调度

高性能

  1. 高吞吐量
  2. 低延时
  3. 高并发
  4. 时间复杂度为O(1)

持久性和拓展性

  1. 数据可持久化
  2. 容错性
  3. 支持在线水平拓展
  4. 消息自动平衡

kafka应用场景

  1. 消息队列

    稳定性,高吞吐性,消息可被重复消费、低延迟性
  2. 行为跟踪
  3. 元数据监控
  4. 日志收集
  5. 流处理
  6. 事件源
  7. 持久性日志(commit log)

kafka高级特性

kafka消息事务

  1. 为什么要支持事务?
  • 满足"读取-处理-写入"模式
  • 流处理需求的不断增强
  1. 数据传输的事务定义
  • 最多一次:消息不会别重复发送,最多被传输一次,但也有可能一次不传输
  • 最少一次:消息不会被漏发送,最少被传输一次,但也有可能被重复传输
  • 精确的一次(Exactly once):不会漏传输也不会重复传输,每个消息都传输且仅仅传输一次,这是大家所期望的
  1. 事务保证
  • 内部重试问题:Producer幂等处理
  • 多分区原子写入
  • 避免僵尸实例

零拷贝

  • 网络传输持久性日志块
  • Java Nio channel.transforTo()方法
  • Linux sendfile系统调用

文件传输到网络的公共数据路径

1. 操作系统将数据从磁盘读入到内核空间的页缓存

2. 应用程序将数据从内核空间读入到用户空间缓存中

3. 应用程序将数据写回到内核空间到socket缓存中

4. 操作系统将数据从socket缓存区复制到网卡缓存区,以便将数据经网络发出

零拷贝过程:

1. 操作系统将数据从磁盘读入到内核空间的页缓存

2. 将数据的位置和长度等信息的描述符增加至内核空间(socket缓冲区)

3. 操作系统将数据从内核拷贝到网卡缓冲区,以便将数据经网络发出

零拷贝指的是内核空间和用户空间之间的交互拷贝次数为零

参考

有关Kafka的那些事的更多相关文章

  1. 饶军:Apache Kafka的过去,现在,和未来

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文首发在云+社区,未经许可,不得转载. 大家好,我大概简单的介绍一下,我叫饶军,我是硅谷的初创公司Confluent的联合创始人之一,我们公 ...

  2. 聊一聊高并发高可用那些事 - Kafka篇

    目录 为什么需要消息队列 1.异步 :一个下单流程,你需要扣积分,扣优惠卷,发短信等,有些耗时又不需要立即处理的事,可以丢到队列里异步处理. 2.削峰 :按平常的流量,服务器刚好可以正常负载.偶尔推出 ...

  3. Kafka文件存储机制那些事

    Kafka是什么 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx ...

  4. Kafka 文件存储机制那些事 - 美团技术团队

    出处:https://tech.meituan.com/2015/01/13/kafka-fs-design-theory.html 自己总结: Kafka 文件存储机制_结构图:https://ww ...

  5. 转】 Kafka文件存储机制那些事

    原博文出自于:http://tech.meituan.com/kafka-fs-design-theory.html    感谢! Kafka是什么 Kafka是最初由Linkedin公司开发,是一个 ...

  6. 这事没完,继续聊spring cloud stream和kafka的这些小事

    上一篇文章讲了如何用spring cloud stream集成kafka,并且跑起来一个demo,如果这一次宣传spring cloud stream的文章,其实到这里就可以啦.但实际上,工程永远不是 ...

  7. 简单聊一聊spring cloud stream和kafka的那点事

    Spring Cloud Stream is a framework for building highly scalable event-driven microservices connected ...

  8. Vertica的这些事(十四)——Vertica实时消费kafka实现

    一. 安装环境 Vertica官方提供了消费kafka的方法,需要注意版本对应 消费kafka原理,是Vertica提供的Udx 首先需要安装相应的环境 /${vertica}/packages/ka ...

  9. Kafka和RocketMQ底层存储之那些你不知道的事

    大家好,我是yes. 我们都知道 RocketMQ 和 Kafka 消息都是存在磁盘中的,那为什么消息存磁盘读写还可以这么快?有没有做了什么优化?都是存磁盘它们两者的实现之间有什么区别么?各自有什么优 ...

随机推荐

  1. C++ 7种排序方法代码合集

    class Solution { public: /******************************************************************** 直接插入排 ...

  2. new操作符创建对象的四个步骤

    new操作符创建对象可以分为以下四个步骤: 创建一个空对象 将所创建对象的__proto__属性值设为构造函数的prototype的属性值 执行构造函数中的代码,构造函数中的this指向该对象 返回对 ...

  3. 用Python的Pandas和Matplotlib绘制股票KDJ指标线

    我最近出了一本书,<基于股票大数据分析的Python入门实战 视频教学版>,京东链接:https://item.jd.com/69241653952.html,在其中给出了MACD,KDJ ...

  4. 基于postman的api自动化测试实践

    测试的好处 每个人都同意测试很重要,但并不是所有人都会去做.每当你添加新的代码,测试可以保证你的api按照预期运行.通过postman,你可以为所有api编写和运行测试脚本. postman中的测试 ...

  5. LinuxIP配置方法

    一.双网卡双IP. eth0为电信,eth1为联通. # cd /etc/sysconfig/network-scripts/ # vi ifcfg-eth0 DEVICE=eth0 HWADDR=0 ...

  6. unity3d插入android有米广告

    有米官网:http://www.youmi.net/register?r=MTI0MDg= 国内的广告,我觉得万普和有米还不错,我也只试了这两个,其他的都是看评价的,呵呵~~~首先我们去有米官网注册一 ...

  7. 3D坐标系

    在3D渲染中,首先要确定的就是坐标系,坐标系根据实际情况,分为两种: 左手坐标系 右手坐标系 在3D空间中,这两个坐标系是没有办法重合到一起的: Unity使用的坐标系为左手坐标系. 在确定左手坐标系 ...

  8. MySQL数据库中几种数据类型的长度

    在MySQL里新建表自然会涉及设置字段长度,但有时会发现长度限制在一些字段类型中不起作用?字段长度是按字节算还是字符算? 如图中:int看起来只要还在本身类型取值范围内就行,字段长度没有起到作用:而c ...

  9. Idiomatic Phrases Game(最短路+注意坑点)

    Tom is playing a game called Idiomatic Phrases Game. An idiom consists of several Chinese characters ...

  10. Java反射(一)

    什么是反射? 在程序的运行过程中,可以动态的创建对象. 反射的基石是什么? 字节码对象是反射的基石.字节码对象:Java类文件通过javac进行编译后生成的xxx.class文件,此文件由jvm加载至 ...