ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

大数据消息中间件之Kafka02

2021-10-13 17:34:16  阅读:154  来源: 互联网

标签:producer consumer 分区 partition Kafka topic 消息中间件 数据 Kafka02


文章目录

一.Kafka生产者

1.1什么是生产者

生产者就是producer,负责生产消息,并把消息放入到队列中

1.2Kafka分区策略

分区原因

  • 方便在集群中扩展,因为每个topic中有多个partition,partition可以适应相对应的机器,从而适应任意大小的数据
  • 提高并发度,可以以partition为单位进行读写

分区原则

  • 首先将生产者producer生产的数据封装成一个ProducerRecord 对象
    在这里插入图片描述
  • 指明 partition 的情况下,直接将指明的值作为 partition 值;
  • 没有指明 partition 值但有 key 的情况下,将 key 值的 hash 值与 topic 的 partition 数进行取余得到 partition 值;
  • 既没有 partition 又没有 key 值的情况下,第一次调用时随机生成一个整数(后面每次调用在这个整数上自增),将这个值与 topic 可用的 partition 总数取余得到 partition 值,也就是常说的 round-robin (轮询)算法。

如何保证数据传输的可靠性

为保证 producer 发送的数据,能可靠的发送到指定的 topic,topic 中的每个 partition 收到 producer 发送的数据后,都需要向 producer 发送 ack (acknowledgement 确认收到),如果 producer 收到 ack,就会进行下一轮的发送,否则重新发送数据。
在这里插入图片描述

二.消费者

消费方式

consumer 采用 pull(拉)模式从 broker 中读取数据。

push(推)模式很难适应消费速率不同的消费者,因为消息发送速率是由 broker 决定的。它的目标是尽可能以最快速度传递消息,但是这样很容易造成 consumer 来不及处理消息。典型的表现是拒绝服务以及网络拥塞。而 pull 模式则可以根据 consumer 的消费能力以适当的速率消费消息。

pull 模式不足之处是, 如果 kafka 没有数据,消费者可能陷入循环中,一直返回空数据。针对这一点,kafka 的消费者在消费数据时会传入一个时长参数 timeout,如果当前没有数据提供消费,consumer 会等待一段时间之后再返回,这段时长即 timeout。

Kafka高效读取数据

  • 顺序写磁盘
    Kafka 的 producer 生产数据,要写到 log 文件中,写的过程是一直追加到文件末尾,为顺序写。顺序写之所以快,是因为其省去了大量磁头寻址时间。
  • 零复制技术
    在这里插入图片描述

下一篇讲述Java操作Kafka

标签:producer,consumer,分区,partition,Kafka,topic,消息中间件,数据,Kafka02
来源: https://blog.csdn.net/weixin_44219219/article/details/120745867

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有