![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
《Kafka》
文章平均质量分 77
kafka
lakernote
不停的复盘自己,砥砺前行,不忘初衷
展开
-
Kafka核心技术和实战 16 位移主题
1,诞生背景A :老版本的Kafka会把位移信息保存在Zk中,当Consumer重启后,自动从Zk中读取位移信息。这种设计使Kafka Broker不需要保存位移数据,可减少Broker端需要持有的状态空间,有利于实现高伸缩性。B :但zk不适用于高频的写操作,这令zk集群性能严重下降,在新版本中将消费者的位移数据作为一条条普通的Kafka消息,提交至内部主题(_consumer_offsets)中保存。实现高持久性和高频写操作。2,特点:A :位移主题是一个普通主题,同样可以被手动创建,修改,删除原创 2021-05-28 09:26:42 · 167 阅读 · 0 评论 -
Kafka核心技术与实战 15 消费者组
Consumer Group 记住下面这三个特性就好了。Consumer Group 下可以有一个或多个 Consumer 实例。这里的实例可以是一个单独的进程,也可以是同一进程下的线程。在实际场景中,使用进程更为常见一些。Group ID 是一个字符串,在一个 Kafka 集群中,它标识唯一的一个 Consumer Group。Consumer Group 下所有实例订阅的主题的单个分区,只能分配给组内的某个 Consumer 实例消费。这个分区当然也可以被其他的 Group 消费当 Cons原创 2021-05-26 10:24:06 · 189 阅读 · 1 评论 -
Kafka核心技术与实战 14 幂等、事务生产者
Kafka 是怎么做到精确一次的呢?简单来说,这是通过两种机制:幂等性(Idempotence)和事务(Transaction)。它们分别是什么机制?两者是一回事吗?要回答这些问题,我们首先来说说什么是幂等性。幂等性有很多好处,其最大的优势在于我们可以安全地重试任何幂等性操作,反正它们也不会破坏我们的系统状态。如果是非幂等性操作,我们还需要担心某些操作执行多次对状态的影响,但对于幂等性操作而言,我们根本无需担心此事。幂等性 Producer在 Kafka 中,Producer 默认不是幂等性的,但我们原创 2021-05-26 10:01:53 · 127 阅读 · 0 评论 -
Kafka核心技术与实战 13 生产者如何管理TCP连接
如果你为这个参数指定了 1000 个 Broker 连接信息,那么很遗憾,你的 Producer 启动时会首先创建与这 1000 个 Broker 的 TCP 连接。并不建议把集群中所有的 Broker 信息都配置到 bootstrap.servers 中,通常你指定 3~4 台就足以了。因为 Producer 一旦连接到集群中的任一台 Broker,就能拿到整个集群的 Broker 信息,故没必要为 bootstrap.servers 指定所有的 Broker。在一个有着 1000 台 Broker原创 2021-05-26 09:39:48 · 307 阅读 · 0 评论 -
Kafka核心技术与实战 12 客户端都有哪些不常见但是很高级的功能
拦截器如果你用过 Spring Interceptor 或是 Apache Flume,那么应该不会对拦截器这个概念感到陌生,其基本思想就是允许应用程序在不修改逻辑的情况下,动态地实现一组可插拔的事件处理逻辑链。它能够在主业务操作的前后多个时间点上插入对应的“拦截”逻辑。下面这张图展示了 Spring MVC 拦截器的工作原理:Kafka 拦截器借鉴了这样的设计思路。你可以在消息处理的前后多个时点动态植入不同的处理逻辑,比如在消息发送前或者在消息被消费后。Kafka 拦截器自 0.10.0.0 版本原创 2021-05-25 17:58:19 · 188 阅读 · 1 评论 -
Kafka核心技术与实战 11 无消息丢失
Kafka 只对“已提交”的消息(committed message)做有限度的持久化保证。生产者程序丢失数据目前 Kafka Producer 是异步发送消息的,也就是说如果你调用的是 producer.send(msg) 这个 API,那么它通常会立即返回,但此时你不能认为消息发送已成功完成。用这个方式,可能会有哪些因素导致消息没有发送成功呢?其实原因有很多,例如网络抖动,导致消息压根就没有发送到 Broker 端;或者消息本身不合格导致 Broker 拒绝接收(比如消息太大了,超过了 Broke原创 2021-05-24 17:08:23 · 166 阅读 · 0 评论 -
Kafka核心技术与实战 10 压缩算法
1,为什么要压缩:压缩秉承了用时间换空间的经典trade-off思想,即用CPU的时间去换取磁盘空间或网络I/O传输量,Kafka的压缩算法也是出于这种目的。2,如何压缩:了解Kafka如何压缩消息,首先要清楚Kafka的消息格式,目前kafka有两大类消息格式,社区称之为V1版本和V2版本。A:共同点:(1):Kafka的消息层次分为:消息集合(message set)和消息(message);一个消息集合中包含若干条日志项(record item),而日志项才是真正封装消息的地方。(2):K原创 2021-05-24 16:16:21 · 423 阅读 · 0 评论 -
Kafka核心技术与实战 09 生产者消息分区机制原理剖析
分区分区提供负载均衡、高性能分区策略所谓分区策略是决定生产者将消息发送到哪个分区的算法,Kafka 为我们提供了默认的分区策略,同时它也支持你自定义分区策略。自定义分区策略轮询策略随机策略按消息键保序策略,Key-ordering 策略轮询随机Kafka 允许为每条消息定义消息键,简称为 Key。这个 Key 的作用非常大,它可以是一个有着明确业务含义的字符串,比如客户代码、部门编号或是业务 ID 等;也可以用来表征消息元数据。特别是在 Kafka 不支持时间戳的年代,在一些场景原创 2021-05-24 11:22:24 · 190 阅读 · 0 评论 -
Kafka核心技术与实战 07 08 重要的集群参数配置
那些要修改默认值的参数Broker端Brokerlog.dirs:这是非常重要的参数,指定了 Broker 需要使用的若干个文件目录路径。要知道这个参数是没有默认值的,这说明什么?这说明它必须由你亲自指定。log.dir:注意这是 dir,结尾没有 s,说明它只能表示单个路径,它是补充上一个参数用的。你只要设置log.dirs,即第一个参数就好了,不要设置log.dir。而且更重要的是,在线上生产环境中一定要为log.dirs配置多个路径,具体格式是一个 CSV 格式,也就是用逗号分隔的多.原创 2021-05-24 10:36:42 · 187 阅读 · 0 评论 -
Kafka核心技术与实战 06
系统选择:Linux为主原因:社区支持IO模型kafka底层是使用Java的NIO,在Linux在Java默认是用的epoll实现相比select更高效数据传输Linux环境下JavaNIO使用零拷贝技术(zero copy)Win环境下只有在Java8 后面版本才支持磁盘:使用机械硬盘还是SSD?因为kafka更多的是顺序读写,很大程度上避免了机械硬盘的随机读写慢问题。所以在数据量不多的情况下,使用机械硬盘物美价廉机械硬盘是否需要RAID?综合考虑,数据量并原创 2021-05-24 09:20:50 · 130 阅读 · 0 评论 -
Kafka核心技术与实战 05
版本号前面的版本号是编译 Kafka 源代码的 Scala 编译器版本。Kafka 服务器端的代码完全由 Scala 语言编写,Scala 同时支持面向对象编程和函数式编程,用 Scala 写成的源代码编译之后也是普通的“.class”文件,因此我们说 Scala 是 JVM 系的语言,它的很多设计思想都是为人称道的。Kafka 新版客户端代码完全由 Java 语言编写。对于 kafka-2.11-2.1.1 的提法,真正的 Kafka 版本号实际上是 2.1.1。那么这个 2.1.1 又表示什么呢原创 2021-05-22 22:23:31 · 153 阅读 · 0 评论 -
Kafka核心技术与实战 04
Kafka 当前的定位Kafka 不再是一个单纯的消息引擎系统,而是能够实现精确一次(Exactly-once)处理语义的实时流处理平台。Kafka版本Apache Kafka,也称社区版 Kafka。优势在于迭代速度快,社区响应度高,使用它可以让你有更高的把控度;缺陷在于仅提供基础核心组件,缺失一些高级的特性。Confluent Kafka,Confluent 公司提供的 Kafka。优势在于集成了很多高级特性且由 Kafka 原班人马打造,质量上有保证;缺陷在于相关文档资料不全,普及率较低,没原创 2021-05-22 20:13:11 · 130 阅读 · 0 评论 -
Kafka核心技术与实战 03
Kafka具有哪些功能消息引擎(广为人知)流处理平台(发展中)可以和Storm/Spark/Flink相媲美分布式存储(没人用)常见问题Kafka在0.11版本实现了exactly once,保证一条消息只会被消费一次,Kafka 0.11的事务Kafka Streams目前定位是流处理库(library),而不是平台(platform)。这也说明了它和其他流处理框架的差异化。即更轻量级,适合中小型公司。地址:https://time.geekbang.org/column/art原创 2021-05-22 18:07:12 · 112 阅读 · 0 评论 -
Kafka核心技术与实战 02
在 Kafka 中,发布订阅的对象是主题(Topic),你可以为每个业务、每个应用甚至是每类数据都创建专属的主题。高可用多个 Broker 进程能够运行在同一台机器上,但更常见的做法是将不同的 Broker 分散运行在不同的机器上,这样如果集群中某一台机器宕机,即使在它上面运行的所有 Broker 进程都挂掉了,其他机器上的 Broker 也依然能够对外提供服务备份机制(Replication)。备份的思想很简单,就是把相同的数据拷贝到多台机器上,而这些相同的数据拷贝在 Kafka 中被称为副原创 2021-05-21 11:18:16 · 240 阅读 · 1 评论 -
Kafka核心技术与实战 01
消息的编码方式CSVXMLJSONProtocol BufferKafka它使用的是纯二进制的字节序列。当然消息还是结构化的,只是在使用之前都要将其转换成二进制的字节序列消息传输协议点对点模型发布/订阅模型Kafka与JMS的关系JMS 是 Java Message Service,它也是支持上面这两种消息引擎模型的。严格来说它并非传输协议而仅仅是一组 API 罢了。不过可能是 JMS 太有名气以至于很多主流消息引擎系统都支持 JMS 规范,比如Act原创 2021-05-20 16:41:34 · 898 阅读 · 1 评论 -
Kafka核心技术与实战
一. Kafka入门01. 消息引擎系统国外名字Messaging System,国内翻译成消息引擎。消息引擎系统:消息引擎是一组规范,企业利用这组规范在不同系统之间传递语义准确的消息,实现松耦合的一步式消息传递。通俗的讲,就是系统A发送消息给消息引擎系统,系统B从消息引擎系统中读取A发送的消息。消息引设定具体的传输协议,用什么方法把消息传出去:点对点模型发布/订阅模型Kafka同时支持这两种消息引擎模型。Kafka引入的优点:削峰填谷:上游系统不再与下游系统进行交互,Kafka能够转载 2021-05-20 11:10:29 · 434 阅读 · 0 评论