Kafka 博文索引

作者:神秘网友 发布时间:2021-02-11 18:20:02

Kafka 博文索引

博文索引

  • KafkaBroker 简析
  • KafkaConsumer 简析
  • KafkaProducer 简析
  • KafkaMirrorMaker 的不足以及一些改进

Kafka 简介

数据是系统的燃料,系统的效率高低很大程度取决于数据流转是否及时:

  • 将数据从生产源头移动到分析处理终端,这个过程完成得越快,组织的反应就越敏捷。
  • 移动工具越是简单易用,花费在数据移动上的精力就越少,开发者就越能专注于核心业务。

Kafka 是一款为数据整合而生的基于发布与订阅的消息系统Messaging System,方便用户在多系统间实现松散耦合的异步数据传输。

Kafka 为消息提供顺序持久化保存,可按需读取。并通过集群部署与冗余副本保障数据安全并提供性能伸缩能力。

核心概念

  • 消息message:最基本的数据单元,由字节数组组成。消息可以有一个可选的键key,键也是一个字节数组。

  • 主题topic:消息通过主题进行分类。主题就好比数据库的表,或者文件系统里的文件夹。

  • 分区partition:一个提交日志,主题可以被分为若干个分区。消息以追加的方式写入分区尾部,然后以先入先出的顺序读取。

  • 偏移offset:一个不断递增的整数值,在创建消息时指定。同个分区中每个消息的偏移量都是唯一的。

  • 生产者producer:创建消息并将其发布到一个特定的主题上。

  • 消费者consumer:订阅主题并按照消息生成的顺序读取消息。


消息分区

Kafka 通过分区来实现 数据冗余可伸缩性:分区可以分布在不同的服务器上,一个主题可以横跨多个服务器,以此来提供比单个服务器更强大的性能。

要注意,由于一个主题一般包含几个分区,因此无法在整个主题范围内保证消息的顺序。生产者在默认情况下,会把消息均衡地分布到主题的所有分区上,而并不关心特定消息会被写到哪个分区。

为了保证消息顺序可控,可以为同类消息指定相同的键,然后生产者会根据键的 hashmod 结果选取分区,从而保证具有相同键的消息总会被写到相同的分区上。


消费者组

每个分区只能被分配给一个消费者,然后消费者会按照消息生成的顺序读取它们。

过程中,消费者会记录已读消息的偏移量,避免重复消费同一条消息。

消息系统中常见的通信模型有两种:

  • 消息队列message queue点对点point to point的排他通信,每条消息只会被消费一次。
  • 发布/订阅pub/sub:类似广播通信,每条消息可能会被消费多次。


为了同时支持这两种模式,Kafka 在消费者端引入了 消费者组群counsumer group这一逻辑概念:

  • 不同的消费者组群之间彼此互不相关,两者消费到的消息是一致的,此时相当于实现了发布/订阅模型。
  • 而同个组群的消费者之间存在互斥关系,每个消费者只能消费部分数据,此时相当于实现了消息队列模型。

集群

一个独立的 Kafka 服务器被称为 broker,其主要职责有两个:

  • 接收来自生产者的消息,为消息设置偏移量,并提交消息到磁盘保存。
  • 为消费者提供服务,对读取分区的请求作出响应,返回已经提交到磁盘上的消息。

为保证可用性,broker 以集群的方式部署。每个集群会自动选举出一个 controller 负责管理工作,包括将分区分配给 broker 和监控 broker。

一个分区从属于一个 broker,该 broker 被称为分区的 leader。

如果分区允许多副本replica,这些副本会分布在多个 broker 上,此时会发生分区复制replication

这种复制机制为分区提供了消息冗余,当 leader 失效时分区会被其他 broker 接管,相关的消费者和生产者都会重连新的 leader。


优势

  • 系统解耦:异构系统可以通过 Kafka 进行通信,减少系统之间协调与开发成本。
  • 模型丰富:通过消费者组的概念,一份数据可以同时支持不同的通信模型,同能够满足不同的应用需求
  • 磁盘存储:Kafka 会将消息持久化到磁盘,允许消息积压并保证数据不会丢失,无需担心生产与消费速率不匹配的问题。
  • 横向扩展:Kafka 通过集群与分区的方式实现了横向扩展,并且可以在线对集群进行扩容。

Kafka 博文索引 相关文章

  1. KafkaBroker 简析

    Kafka 依赖 Zookeeper 来维护集群成员的信息: Kafka 使用 Zookeeper 的临时节点来选举 controller Zookeeper 在 broker 加入集群或退出集群时通知 controller controller 负责在 broker 加入或离开集群时进行分区 leader 选举 broker 管理 每个 broker 都有

  2. KafkaConsumer 简析

    使用方式 创建一个 KafkaConsumer 对象订阅主题并开始接收消息: Properties properties = new Properties(); properties.setProperty("bootstrap.servers", "localhost:9092"); properties.setProperty("key.deserializer", "org.apache.kafka.common.seria

  3. SpringBoot和Kafka整合

    今天简单通过代码演示一下,如何使用springboot来整合kafka或者RabbitMQ,其实非常简单,直接使用别人已经封装好的组件即可,不需要自己开发,如果不想要别人封装的话,可以按照springboot整合rocketmq那个章节自己编码来实现.OK废话不上直接上代码, SpringBoot+Ka

  4. 用Python索引,切片和子集化DataFrame

    问题 如何访问数据集中的特定数据 Python和Pandas如何帮助我分析数据 目标 描述什么是基于0的索引。 使用列标题和索引位置来处理和提取数据。 使用切片从DataFrame中选择数据集。 使用标签和基于整数的索引来选择数据框中的数据范围。 在DataFrame的子集中重

  5. Kafka高可用,高吞吐量低延迟的高并发的特性背后实现机制

    1 概述 Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式消息系统,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。 2消息系统介绍 一个消息系统负责将数据从一个应用传递到另外一个应用,

  6. Kafka:主题管理

    主题的管理 主题的管理包括创建主题、查看主题信息、修改主题、删除主题等操作,可以通过kafka的kafka-topics.sh脚本来执行这些操作,这个脚本在$KAFKA_HOME/bin/目录下。 该脚本正文仅有一行: #!/bin/bash# Licensed to the Apache Software Foundation (A

  7. 第6章、Kafka Streams

    一、概述 1.1、Kafka Streams Kafka Streams。Apache Kafka开源项目的一个组成部分。是一个功能强大,易于使用的库。用于在Kafka上构建高可分布式、拓展性,容错的应用程序。 1.2、Kafka Streams特点 功能强大 高扩展性,弹性,容错 轻量级 轻量级 一个库,

  8. 第2章、Kafka集群部署

    一、环境准备 1.1、集群规划 master slave01 hadoop104 zk zk zk kafka kafka kafka 1.2、jar包下载 http://kafka.apache.org/downloads.html 二、Kafka集群部署 解压安装包 tar -zxvf kafka_2.11-0.11.0.0.tgz -C /opt/module/ 修改解压后的文件名称 mv kaf

  9. 第3章、Kafka工作流程分析

    一、Kafka生产过程分析 1.1、写入方式 producer采用推(push)模式将消息发布到broker,每条消息都被追加(append)到分区(patition)中,属于顺序写磁盘(顺序写磁盘效率比随机写内存要高,保障kafka吞吐率)。 1.2、分区(Partition) 消息发送时都被发送

  10. 第5章 Kafka producer拦截器(interceptor)

    一、拦截器原理 Producer拦截器(interceptor)是在Kafka 0.10版本被引入的,主要用于实现clients端的定制化控制逻辑。 对于producer而言,interceptor使得用户在消息发送前以及producer回调逻辑前有机会对消息做一些定制化需求,比如修改消息等。同时,produc

每天更新java,php,javaScript,go,python,nodejs,vue,android,mysql等相关技术教程,教程由网友分享而来,欢迎大家分享IT技术教程到本站,帮助自己同时也帮助他人!

Copyright 2020, All Rights Reserved. Powered by 跳墙网(www.tqwba.com)|网站地图|关键词