kafka
文章平均质量分 97
详细解读kafka细节原理
爱吃芝士的土豆倪
世间不如意十之八九。如果没办法一次到位,就分阶段实现吧。
展开
-
消息队列之堆积问题分析
根据问题描述,历史消息已经被存储到4个固定的分区中,只有新增的消息才会到新的分区中,所以我们的重点是处理已有的分区,那么回到扩容问题,因为现有分区已经和消费者组里面的消费者一对一了,所以哪怕我们增加分区,或者消费者组里面的消费者,会触发消费再均衡,但是因为突发情况导致消费者消费能力不够,所以哪怕扩容,也不会很快的改善这个堆积问题。该问题其实需要和下游进行对其,因为现在急需解决消息堆积的问题,如果你贸然使用了多线程来处理,但是没有和下游处理端进行对其,那么他们可能也会面临突增的流量,可能会造成一定的后果。原创 2024-01-06 10:50:40 · 716 阅读 · 2 评论 -
消息队列进阶-3.消息队列常见问题解决方案
根据以往积累的经验,我直接看了kafka的topic的数据,果然上面消息有积压,但这次每个partition都积压了十几万的消息没有消费,比以往加压的消息数量增加了几百倍。具体的实现方法是,在发送消息时,给每条消息指定一个全局唯一的 ID,消费时,先根据这个 ID 检查这条消息是否有被消费过,如果没有消费过,才更新数据,然后将消费状态置为已消费。再举一个例子,将账户X的余额加100元,这个操作它就不是幂等的,每执行一次,账户余额就增加100元,执行多次和执行一次对系统的影响(也就是账户的余额)是不一样的。原创 2023-11-29 17:50:09 · 1050 阅读 · 0 评论 -
消息队列进阶-2.分布式事务解决思路汇总
锁粒度完全由业务自己控制,目的是解决复杂业务中,跨表跨库等大颗粒度资源锁定问题。TCC把事务运行工程分为了Try(一般是做一些预留资源或者锁定资源的动作) ,如果每一个分支都可以锁定成功,那么就可以执行下一步的confirm,如果有失败的呢,就要执行cancel。每个阶段的逻辑由业务代码控制,避免了长事务,可以获取更高的性能。这个主要是基于业务层面的事务控制,每个事务分支(订单服务、库存服务)都需要自己去实现对应的try。confirm/cncel 接口,侵入比较强。原创 2023-11-29 12:56:28 · 1004 阅读 · 0 评论 -
消息队列进阶-1.消息队列的应用场景与选型
每个消费组都消费主题中的一份完整的消息,不同的消费组之间起到了隔离的效果,都是可以完整消费的,彼此的消费进度是不受影响的。但是Kafka这种异步批量的设计带来的问题就是,它的同步收发消息的响应时延比较高,因为当客户端发送一条消息的时候,Kafka并不会立即发送出去,而是要等一会攒一批再发送,在它的Broker中,很多地方都会使用这种“先攒一波再一起处理”的设计。Kafka的性能,尤其是异步收发的性能,是三者中最好的,但与RocketMQ并没有产生量级上的差异,大约每秒钟可以处理几十万条数据。原创 2023-11-28 16:35:03 · 1155 阅读 · 0 评论 -
探究Kafka原理-7.exactly once semantics 和 性能测试
与 事 务 有 着 莫 大 的 关 联 , 这 个 参 数 的 默 认 值 为“read_uncommitted”,意思是说消费端应用可以看到(消费到)未提交的事务,当然对于已提交的事务也是可见的。如果一定要给一个准则,则建议将分区数设定为集群中 broker 的倍数,即假定集群中有 3 个 broker 节点,可以设定分区数为 3/6/9 等,至于倍数的选定可以参考预估的吞吐量。假设1-100的数据读了,处理完了,写入kafka目标topic,但是offset还是1,然后,程序崩溃了。原创 2023-11-28 13:05:18 · 1221 阅读 · 0 评论 -
探究Kafka原理-6.CAP理论实践
Step 4:follower 发送第二轮 fetch 请求,携带当前最新的 offset = 1,leader 处理 fetch 请求时,更新 remote LEO = 1,对比 LEO 值最小为 1,所以 HW = 1,此时 leader 没有新的消息数据,所以直接返回 leader HW = 1 给 follower,follower 对比当前最新的 LEO 值 与 leader HW 值,取最小的作为新的 HW 值,此时 follower HW = 1。原创 2023-11-27 18:48:11 · 1302 阅读 · 0 评论 -
探究Kafka原理-5.Kafka设计原理和生产者原理解析
如果将 retries 参数配置为非零值,并且 max .in.flight.requests.per.connection 参数配置为大于 1 的值,那可能会出现错序的现象:如果批次 1 消息写入失败,而批次 2 消息写入成功,那么生产者会重试发送批次 1 的消息,此时如果批次 1 的消息写入成功,那么这两个批次的消息就出现了错序。如果生产者发送消息的速度超过发送到服务器的速度,则会导致生产者空间不足,这个时候 KafkaProducer.send()方法调用要么被阻塞,要么抛出异常,这个取决于参数。原创 2023-11-26 20:41:16 · 1196 阅读 · 0 评论 -
探究Kafka原理-4.API使用
写一个消费者,不断地从kafka种取消费如上 “ 用户行为事件” 数据,并做统计计算,每五分钟,输出一次截至到当时的数据中出现过的用户总数。本质 去重guid数。但是api会对最原始的bitmap进行一些优化,比如说稀疏型的向量的场景中,例如roaringbitmap工具包进行了优化,慢慢的进行了扩容。写一个消费者,不断地从kafka种取消费如上 “ 用户行为事件” 数据,并做统计计算,每五分钟,输出一次截至到当时的数据中出现过的用户总数。决定消费者能读到什么样的数据。原创 2023-11-25 18:50:23 · 1262 阅读 · 0 评论 -
探究Kafka原理-3.生产者消费者API原理解析
每个消费组在服务端对应一个 GroupCoordinator 其进行管理,GroupCoordinator 是 Kafka 服务端中用于管理消费组的组件。消费者客户端中由 ConsumerCoordinator 组件负责与 GroupCoordinator 行交互;ConsumerCoordinator 和 GroupCoordinator 最重要的职责就是负责执行消费者 rebalance 操作consumer 的消费位移提交方式:全自动定时提交到 consumer_offsets半自动。原创 2023-11-24 20:38:05 · 1526 阅读 · 0 评论 -
探究Kafka原理-2.Kafka基本命令实操
官方文档地址:https://docs.kafka-eagle.org/其中修改最核心的配置# 给kafka集群起一个名字# 告诉它kafka集群所连接的zookeeper在哪里# 告诉集群broker服务器有多少台# 还需要一种数据库,可以针对性的选择# kafka sqlite jdbc driver address 本地的嵌入式数据库如上,数据库选择的是 sqlite,需要手动创建所配置的 db 文件存放目录:/opt/data/kafka-eagle/db/原创 2023-11-23 17:56:29 · 638 阅读 · 0 评论 -
探究Kafka原理-1.初识Kafka
Kafka 最初是由 LinkedIn 即领英公司基于 Scala 和 Java 语言开发的分布式消息发布-订阅系统,现已捐献给 Apache 软件基金会。其具有高吞吐、低延迟的特性,许多大数据实时流式处理系统比如Storm、Spark、Flink 等都能很好地与之集成。kafka简单的说就是一个消息系统,类似的有rabbitmq等,但是kafka不能严格的称之为消息队列,只能说是消息中间件。下面简述消息队列,是一个数据的存储 和 中转系统吧。队列的特点,先进先出。原创 2023-11-22 16:21:00 · 950 阅读 · 0 评论