1.5分彩心得分布式消息通信Kafka

  • 时间:
  • 浏览:1
  • 来源:5分3D平台-5分3D官方

  婚外沉沦每条发送到 kafka 集群的消息都还还有一个 类别。物理上来说,不同 topic 的消息是分开存储的,每个 topic 可非要有多个生产者向它发送消息,也可非要有多 个消费者去消费其中的消息。

  每个 topic 可非要划分多个分区(每个 Topic 大慨还还有一个 分区),同一 topic 下的不同分区含高的消息是不同的。

  每个消息在被再加到分区时,后会被分配还还有一个 offset(偏移量),它是消息在此分区中的唯一编号,kafka 通过 offset 消息在分区内的顺序,offset 的顺序不跨分区,即 kafka 只在同还还有一个 分区内的消息有序。

  每四根消息发送到 broker 时,会根据 partition 的规则选取存储到哪还还有一个 partition。因此 partition 规则设置合理,非要 所有的消息会均匀的分布在不同的 partition 中, 曾经后会点累似 数据库的分库分表的概念,把数据做了分片出理 。

  在 kafka 中,四根消息由 key、value 两偏离 构成,在发送四根消息时,大伙可非要指定你這個 key,非要 producer 会根据 key 和 partition 机制来判断当前这条消息应该发送并存储到哪个 partition 中.

  因此 Key 为 null,则会随机分配还还有一个 分区。你這個 随机是在你這個 参 数metadata.max.age.ms的时间范围内随机选取还还有一个 。

  对于你這個 时间段内,因此 key 为 null,则只会发送到唯一的分区。该值默认情况汇报下10 分钟更新一次。

  另外,为了提高消费端的消费能力,一般会通不多个 consumer 去消费同还还有一个 topic ,也就说 我消费端的负载均衡机制,也就说 我大伙接下来要了解的,在多个 partition 以 及多个 consumer 的情况汇报下,消费者是怎么消费消息的

  组内的所有消费者协调在一同来消费订阅主题的所有分区。当然每还还有一个 分区非要由同还还有一个 消费组内的 consumer 来消费,非要 同还还有一个 consumer group 上面的 consumer 是怎么分配该消费哪个分区里的数据的呢?

  通过前面的案例演示,大伙应该能猜到,同还还有一个 group 中的消费者对于还还有一个 topic 中的多个 partition,所处一定的分区分配策略.

  Range 策略是对每个主题而言的,首先对同还还有一个 主题上面的分区按照序号进行排序,并对消费者按照字母顺序进行 排序。

  在大伙的例子上面,大伙有 10 个分区,3 个消费者线,且除不尽,非要 消费者线 因此多消费一 个分区,不多不多最后分区分配的结果看起来是曾经的:

  假如大伙有 2 个主题(T1 和 T2),分别有 10 个分区,非要 最后分区分配的结果看起来是曾经的:

  可非要看出,C1-0 消费者任务管理器比你這個 消费者线 个 分区,这就说 我 Range strategy 的还还有一个 很明显的弊端

  轮询分区策略是把所有 partition 和所有 consumer 任务管理器都列出来,因此按照 hashcode 进行排序。最后通过轮询算法分配 partition 给消费任务管理器。因此所有 consumer 实例的订阅是相同的,非要 partition 会均匀分布。

  而具体怎么执行分区策略,就说 我前面提到过的并与否内置的分区策略。而 kafka 对于分配策略这块,提供了可插拔的实现辦法 , 也就说 我说,除了这并与否之外,大伙还可非要创建你這個 人的分配机制。

  每个消费者后会向 coordinator 发送 syncgroup 请求,不 过非要 leader 节点会发送分配方案,你這個 消费者就说 我打打酱油而已。

  前面在 partition 的曾经,提到过 offset, 每个 topic可非要划分多个分区(每个 Topic 大慨还还有一个 分区),同一 topic 下的不同分区含高的消息是不同的。

  每个消息在被再加到分区时,后会被分配还还有一个 offset(称之为偏移量),它是消息在此分区中的唯一编号,kafka 通过 offset 消息 在分区内的顺序,offset 的顺序不跨分区,即 kafka 只在同还还有一个 分区内的消息是有序的

  对于应用层的消费来说, 每次消费还还有一个 消息因此提交曾经,会保存当前消费到的最近的还还有一个 offset。非要 offset 保所处哪里?

  首先大伙非要解的是,kafka 是使用日志文件的辦法 来保存生产者和发送者的消息,每条消息都还还有一个 offset 值来表示它在分区中的偏移量。

  Kafka 中存储的一般后会海量的消息数据,为了出理 日志文件过大,Log 并后会直接对应在还还有一个 磁盘上的日志文件,就说 我对应磁盘上的还还有一个 目录, 你這個 目录的命名规则是

  了解到这里的曾经,大伙再结合前面讲的消息分类分类整理策略, 就应该能明白消息发送到 broker 上,消息会保存到哪个分区中,因此消费端应该消费那此分区的数据了。

  大伙现在大偏离 企业仍然用的是机械內部的磁盘,因此把消息以随机的辦法 写入到磁盘,非要 磁盘首没办法 做的就说 我寻址,也就说 我定位到数据所在的物理地址,在磁盘上就要找到对应的柱面、磁头以及对应的扇区;你這個 过程相对内 存来说会消耗大量时间,为了规避随机读写带来的时间消耗,kafka 采用顺序写的辦法 存储数据。

  即使是曾经,因此频繁的 I/O 操作仍然会造成磁盘的性能瓶颈,不多不多 kafka 还还还有一个 性能策略

  消息从发送到落地保存,broker 的消息日志并与否就说 我文件目录,每个文件后会二进制保存,生产者和消费者使用相同的格式来出理 。在消费者获撤消息时,服务器先从硬盘读取数据到内存,因此把内存中的数据原封不动的通 过 socket 发送给消费者。

  你這個 过程涉及到 4 次上下文切换以及 4 次数据克隆好友,因此有两次克隆好友操作是由 CPU 完成。因此你這個 过程中,数据删剪非要 进行变化,仅仅是从磁盘克隆好友到网卡缓冲区。

  通过“零拷贝”技术,可非要再加那此没必要的数据克隆好友操作, 一同也会减少上下文切换次数。现代的 unix 操作系统提供 还还有一个 优化的代码径,用于将数据从页缓存传输到 socket; 在 Linux 中,是通过 sendfile 系统调用来完成的。

  使用 sendfile,只都里能一次拷贝就行,允许操作系统将数据直接从页缓存发送到网络上。不多不多在你這個 优化的径中, 非要最后一步将数据拷贝到网卡缓存中是都里能的返回搜狐,查看更多

   文章来源于880游戏博贝棋牌