
Kafka
文章平均质量分 62
张伯毅
某厂技术,Apache DolphinScheduler Committer.
专注于调度&实时&大数据体系~
展开
-
使用archas确定线上环境是否缺少jar包.
一. 背景 线上环境发送kakfa消息的时候, 报错:org.apache.kafka.common.KafkaException: java.lang.NoClassDefFoundError: Could not initialize class org.apache.kafka.common.record.CompressionType$SnappyConstructors at org.apache.kafka.common.record.CompressionType$3.w原创 2022-04-26 00:00:00 · 584 阅读 · 1 评论 -
NoClassDefFoundError: Could not initialize class org.apache.kafka.common.record.Compressio
一. 问题报错信息org.apache.kafka.common.KafkaException: java.lang.NoClassDefFoundError: Could not initialize class org.apache.kafka.common.record.CompressionType$SnappyConstructors at org.apache.kafka.common.record.CompressionType$3.wrapForOutput(Com原创 2022-04-21 00:00:00 · 3489 阅读 · 0 评论 -
Zookeeper 开启kerberos配置
一. 前言这两天需要搞一个开启kerberos的zookeeper环境用于测试. 顺手记录一下.二. 安装步骤2.1 前置环境准备JDK : jdk1.8服务器 : CentOS 7.5软件版本: zookeeper : 2.4.8前置环境: kerberos 安装 参考文档2.2 安装zookeeperzookeeper安装我就不细说了, 先贴一个配置文件示例 , 后续的参数配置都是基于这个zoo.cfg配置文件的基础上进行修改.zoo.cfg 配置# The numb原创 2021-07-19 21:46:43 · 3159 阅读 · 5 评论 -
大白话 + 13 张图解 Kafka
前言一、Kafka基础消息系统的作用1.Topic 主题2.Partition 分区3.Producer - 生产者4.Consumer - 消费者5.Message - 消息二、kafka的集群架构Replica - 副本Consumer Group - 消费者组Controllerkafka和zookeeper如何配合工作加餐时间1...转载 2020-02-01 15:45:09 · 746 阅读 · 0 评论 -
Kafka学习笔记: 控制器Controller
控制器组件(Controller),是 Apache Kafka 的核心组件。它的主要作用是在 Apache ZooKeeper 的帮助下管理和协调整个 Kafka 集群。集群中任意一台 Broker 都能充当控制器的角色,但是,在运行过程中,只能有一个 Broker 成为控制器,行使其管理和协调的职责。换句话说,每个正常运转的 Kafka 集群,在任意时刻都有且只有一个控制器。控制...翻译 2019-12-29 18:33:02 · 650 阅读 · 0 评论 -
Kafka学习笔记: Kafka 2.3消费者组重平衡
消费者组的重平衡流程,它的作用是让组内所有的消费者实例就消费哪些主题分区达成一致。重平衡需要借助 Kafka Broker 端的 Coordinator 组件,在 Coordinator 的帮助下完成整个消费者组的分区重分配。触发与通知重平衡的 3 个触发条件:组成员数量发生变化。 --每次消费者组启动时,必然会触发重平衡过程。 订阅主题数量发生变化。 订阅主题的分区数...翻译 2019-12-29 17:38:06 · 936 阅读 · 0 评论 -
Kafka学习笔记: 请求模式 [ Reactor ]
Kafka 使用的是 Reactor 模式。Reactor 模式概览多个客户端会发送请求给到 Reactor。Reactor 有个请求分发线程 Dispatcher,也就是图中的 Acceptor,它会将不同的请求下发到多个工作线程中处理。Acceptor 线程只是用于请求分发,不涉及具体的逻辑处理,非常得轻量级,因此有很高的吞吐量表现。而这些工作线程可以根据实际业务处理需要任...翻译 2019-12-29 13:32:31 · 716 阅读 · 0 评论 -
Kafka学习笔记: 副本机制
所谓副本(Replica),本质就是一个只能追加写消息的提交日志。根据 Kafka 副本机制的定义,Kafka 是有主题概念的,而每个主题又进一步划分成若干个分区。副本的概念实际上是在分区层级下定义的,每个分区配置有若干个副本。同一个分区下的所有副本保存有相同的消息序列,这些副本分散保存在不同的 Broker 上,所以每台 Broker 都可能保存有各个主题下不同分区的不同副本,从而能够对抗...翻译 2019-12-27 17:29:40 · 454 阅读 · 0 评论 -
Kafka学习笔记 : 消费进度监控 [ 消费者 Lag 或 Consumer Lag ]
所谓滞后程度,就是指消费者当前落后于生产者的程度。Lag 应该算是最最重要的监控指标了。它直接反映了一个消费者的运行情况。一个正常工作的消费者,它的 Lag 值应该很小,甚至是接近于 0 的,这表示该消费者能够及时地消费生产者生产出来的消息,滞后程度很小。反之,如果一个消费者 Lag 值很大,通常就表明它无法跟上生产者的速度,最终 Lag 会越来越大,从而拖慢下游消息的处理速度。...翻译 2019-12-27 16:36:32 · 32280 阅读 · 13 评论 -
Kafka学习笔记 : 消费者 TCP 连接
KafkaProducer 在构建实例的时候,会在后台默默地启动一个 Sender 线程,这个 Sender 线程负责 Socket 连接的创建。并且连接bootstrap.servers指定的的所有 broker.构建 KafkaConsumer 实例时是不会创建任何 TCP 连接的.TCP 连接是在调用 KafkaConsumer.poll 方法时被创建的。...翻译 2019-12-27 15:35:46 · 1488 阅读 · 0 评论 -
Kafka学习笔记: 多线程开发消费者
从 Kafka 0.10.1.0 版本开始,KafkaConsumer 就变为了双线程的设计,即用户主线程和心跳线程。所谓用户主线程,就是你启动 Consumer 应用程序 main 方法的那个线程,而新引入的心跳线程(Heartbeat Thread)只负责定期给对应的 Broker 机器发送心跳请求,以标识消费者应用的存活性(liveness)。引入这个心跳线程还有一个目的,那...翻译 2019-12-27 14:55:50 · 975 阅读 · 0 评论 -
Kafka学习笔记: CommitFailedException 异常处理
场景一: 因为处理时间超过max.poll.interval.ms 所设定的时间.简化你的消息处理逻辑。具体来说有 4 种方法:缩短单条消息处理的时间。比如,之前下游系统消费一条消息的时间是 100 毫秒,优化之后成功地下降到 50 毫秒,那么此时 Consumer 端的 TPS 就提升了一倍。 增加 Consumer 端允许下游系统消费一批消息的最大时长。这取决于 Con...翻译 2019-12-27 00:11:01 · 1646 阅读 · 0 评论 -
Kafka学习笔记: 自动提交&手动提交.
Consumer 需要向 Kafka 汇报自己的位移数据,这个汇报过程被称为提交位移(Committing Offsets)。因为 Consumer 能够同时消费多个分区的数据,所以位移的提交实际上是在分区粒度上进行的,即 Consumer 需要为分配给它的每个分区提交各自的位移数据。提交位移主要是为了表征 Consumer 的消费进度,这样当 Consumer 发生故障重启之后,就能够...翻译 2019-12-26 23:22:20 · 18225 阅读 · 4 评论 -
Kafka学习笔记: 消费者组重平衡优化
Rebalance 就是让一个 Consumer Group 下所有的 Consumer 实例就如何消费订阅主题的所有分区达成共识的过程。在 Rebalance 过程中,所有 Consumer 实例共同参与,在协调者组件的帮助下,完成订阅主题分区的分配。但是,在整个过程中,所有实例都不能消费任何消息,因此它对 Consumer 的 TPS 影响很大。"协调者" 在 Kafka 中对...翻译 2019-12-26 12:29:39 · 939 阅读 · 0 评论 -
Kafka学习笔记:位移主题Offsets Topic
__consumer_offsets 在 Kafka 源码中有个更为正式的名字,叫位移主题,即 Offsets Topic。位移主题就是普通的 Kafka 主题。它的消息格式却是 Kafka 自己定义的,不能修改,不能随意向里面写数据.如果位移主题是 Kafka 自动创建的,那么该主题的分区数是 50,副本数是 3。Consumer 的位移管理机制 是 将 Co...翻译 2019-12-26 10:15:56 · 5682 阅读 · 0 评论 -
Kafka学习笔记: Kafka 的消费者组
Consumer Group 是 Kafka 提供的可扩展且具有容错性的消费者机制。既然是一个组,那么组内必然可以有多个消费者或消费者实例(Consumer Instance),它们共享一个公共的 ID,这个 ID 被称为 Group ID。组内的所有消费者协调在一起来消费订阅主题(Subscribed Topics)的所有分区(Partition)。每个分区只能由同一...翻译 2019-12-25 16:46:47 · 1491 阅读 · 0 评论 -
Kafka学习笔记:Kafka 消息交付可靠性保障以及精确处理一次语义的实现
幂等性 Producer 只能保证单分区、单会话上的消息幂等性;而事务能够保证跨分区、跨会话间的幂等性。所谓的消息交付可靠性保障,是指 Kafka 对 Producer 和 Consumer 要处理的消息提供什么样的承诺。常见的承诺有以下三种:最多一次(at most once):消息可能会丢失,但绝不会被重复发送。至少一次(at least once):消...翻译 2019-12-25 01:02:23 · 2638 阅读 · 0 评论 -
Kafka学习笔记:生产者 TCP 连接
Kafka 生产者程序概览Kafka 的 Java 生产者 API 主要的对象就是 KafkaProducer。通常我们开发一个生产者的步骤有 4 步。第 1 步:构造生产者对象所需的参数对象。第 2 步:利用第 1 步的参数对象,创建 KafkaProducer 对象实例。第 3 步:使用 KafkaProducer 的 send 方法发送消息。...翻译 2019-12-24 23:40:47 · 3452 阅读 · 0 评论 -
Kafka学习笔记: Kafka 百惑梳理
1. 消息经常堆积起来,不能消费了,重启服务就能继续消费了。消息堆积可能原因如下:1. 生产速度大于消费速度,这样可以适当增加分区,增加consumer数量,提升消费TPS;2. consumer消费性能低,查一下是否有很重的消费逻辑(比如拿到消息后写HDFS或HBASE这种逻辑就挺重的),看看是否可以优化consumer TPS;3. 确保consumer端没有因为异常而导致消费han...翻译 2019-12-24 18:32:33 · 1832 阅读 · 0 评论 -
Kafka无消息丢失配置
Kafka到底会不会丢数据(data loss)? 通常不会,但有些情况下的确有可能会发生。下面的参数配置及Best practice列表可以较好地保证数据的持久性(当然是trade-off,牺牲了吞吐量)。笔者会在该列表之后对列表中的每一项进行讨论,有兴趣的同学可以看下后面的分析。block.on.buffer.full = true acks = all retries = MAX_V...转载 2019-12-24 18:18:48 · 312 阅读 · 0 评论 -
Flink + Kafka 0.11端到端精确一次处理语义的实现
2017年12月Apache Flink社区发布了1.4版本。该版本正式引入了一个里程碑式的功能:两阶段提交Sink,即TwoPhaseCommitSinkFunction。该SinkFunction提取并封装了两阶段提交协议中的公共逻辑,自此Flink搭配特定source和sink(特别是0.11版本Kafka)搭建精确一次处理语义(下称EOS)应用成为了可能。作为一个抽象类,TwoPha...转载 2019-12-24 17:41:28 · 1008 阅读 · 0 评论 -
Kafka学习笔记: 拦截器
Kafka 拦截器分为生产者拦截器和消费者拦截器。生产者拦截器允许你在发送消息前以及消息提交成功后植入你的拦截器逻辑;而消费者拦截器支持在消费消息前以及提交位移后编写特定逻辑。 这两种拦截器都支持链的方式,即你可以将一组拦截器串连成一个大的拦截器,Kafka 会按照添加顺序依次执行拦截器逻辑。假设你想在生产消息前执行两个“前置动作”:第一个是为消息增加一个头信息,封装发送该消息的时...翻译 2019-12-24 17:22:42 · 1385 阅读 · 1 评论 -
Kafka学习笔记: 无消息丢失配置
Kafka 是能做到不丢失消息的,只不过这些消息必须是已提交的消息,而且还要满足一定的条件。Kafka 只对“已提交”的消息(committed message)做有限度的持久化保证。这句话里面有两个核心要素第一个核心要素是“已提交的消息”。当 Kafka 的若干个 Broker 成功地接收到一条消息并写入到日志文件后,它们会告诉生产者程序这条消息已...翻译 2019-12-24 15:33:18 · 516 阅读 · 0 评论 -
Kafka无消息丢失配置
不要使用 producer.send(msg),而要使用 producer.send(msg, callback)。记住,一定要使用带有回调通知的 send 方法。 设置 acks = all。acks 是 Producer 的一个参数,代表了你对“已提交”消息的定义。如果设置成 all,则表明所有副本 Broker 都要接收到消息,该消息才算是“已提交”。这是最高等级的“已提交”定义。 设...翻译 2019-12-24 15:32:01 · 390 阅读 · 0 评论 -
Kafka学习笔记: 生产者压缩算法
Kafka 的消息层次都分为两层:消息集合(message set)以及消息(message)。一个消息集合中包含若干条日志项(record item),而日志项才是真正封装消息的地方。Kafka 底层的消息日志由一系列消息集合日志项组成。Kafka 通常不会直接操作具体的一条条消息,它总是在消息集合这个层面上进行写入操作。社区分别称之为 V1 版本和 V2 版本。V2...翻译 2019-12-24 11:34:14 · 1573 阅读 · 0 评论 -
压缩算法性能对比
看一个压缩算法的优劣,有两个重要的指标:一个指标是压缩比,原先占 100 份空间的东西经压缩之后变成了占 20 份空间,那么压缩比就是 5,显然压缩比越高越好;另一个指标就是压缩 / 解压缩吞吐量,比如每秒能压缩或解压缩多少 MB 的数据。同样地,吞吐量也是越高越好。从表中我们可以发现 zstd 算法有着最高的压缩比,而在吞吐量上的表现只能说中规中矩。反观 LZ4 算法,它在吞吐...翻译 2019-12-24 11:28:55 · 13071 阅读 · 0 评论 -
Kafka学习笔记: 如何估算 kafka集群规模
假设带宽是 1Gbps,即每秒处理 1Gb 的数据.假设每台 Kafka 服务器都是安装在专属的机器上,也就是说每台 Kafka 机器上没有混布其他服务。通常情况下你只能假设 Kafka 会用到 70% 的带宽资源,因为总要为其他应用或进程留一些资源。根据实际使用经验,超过 70% 的阈值就有网络丢包的可能性了,故 70% 的设定是一个比较合理的值,也就是说单台 Kafka...翻译 2019-12-23 15:19:07 · 5174 阅读 · 4 评论 -
Kafka学习笔记: 集群配置必备参数调整
全局参数[server.properties]需要修改的参数Broker 端参数ZooKeeper 设置Broker通信Topic参数数据存储参数Topic 级别参数数据保存参数Topic 级别参数的设置创建 Topic 时进行设置修改 Topic 时设置JVM 参数堆内存设置GC的设置如何设置操作系统参数文件描述符限制文件...翻译 2019-12-23 13:20:37 · 2369 阅读 · 0 评论 -
Kafka学习笔记: kafka2.4.0 源码编译&说明
前言 相对来说,kafka 编译比较简单,不过 kafka 是 scala 写的,所以在环境上要安装一下插件.下载2.4.0源码包链接:https://pan.baidu.com/s/15h2qn14HV8HCoEPldT77LA 密码:e59n官方:http://kafka.apache.org/GIT LAB方式: git clone ht...原创 2019-12-23 10:14:35 · 1836 阅读 · 0 评论 -
Kafka 生产者消费者模式 写入/读取数据 [ 命令行/Java 代码 ]
一.确认配置文件:打开config/server.properties 文件,修改broker.id,listeners,port,log.dirsvi config/server.propertiesbroker.id=0listeners=PLAINTEXT://192.168.105.110:9092port=9092log.dirs=kafka-logszo...原创 2019-09-11 16:01:00 · 5104 阅读 · 0 评论 -
Kafka 报错异常
Kafka 后台 server.log 日志报错[2019-09-11 15:40:16,341] ERROR [KafkaApi-1001] Number of alive brokers '1' does not meet the required replication factor '3' for the offsets topic (configured via 'of...原创 2019-09-11 15:47:43 · 4640 阅读 · 0 评论