美文网首页
Kafka学习笔记

Kafka学习笔记

作者: 华阳_3bcf | 来源:发表于2019-02-18 11:19 被阅读0次

    0. 思维导图

    Kafka是一种高吞吐量的分布式发布订阅消息系统。在此基础上,也是流处理平台。

    Kafka.png kafka_modules.png

    1. 术语

    • broker:Kafka 集群包含一个或多个服务器,这种服务器被称为 broker
      • controller: Zookeeper 选出来的broker,它维护leader/follower信息。
      • Topic:每条发布到 Kafka 集群的消息都有一个类别,这个类别被称为 Topic。
        • partition:物理上的概念,每个 Topic 包含一个或多个 Partition.
          • replica:partition 的副本,保障 partition 的高可用
            • leader: replica 中的一个角色, producer 和 consumer 只跟 leader 交互
            • follower: replica 中的一个角色,从 leader 中复制数据
          • offset:partition 上的指针,consumer从这里开始读取
    • producer:负责发布消息到 Kafka broker
    • consumer:消息消费者,向 Kafka broker 读取消息的客户端
      • consumer group:每个 Consumer 属于一个特定的 Consumer Group(可为每个 Consumer 指定 group name,若不指定 group name 则属于默认的 group)

    2. 基本概念

    2.1. 架构图

    1550407763258
    • 上方的Producers会产生很多的消息和信息送给kafka。

    • kafka会把这些消息存储下来。

    • 下方的Consumers会从kafka获取它所需要的数据,然后自行处理,比如Consumers可能会将消息存储到cassandra、HBase。

    • 右侧是流处理App。首先“流”是什么?“流”简单来说,就是不间断的一系列变化的数据或者消息。kafka可以很好的支持流处理(支持很多“流API”),一些流处理框架下的App可以接入kafka,并且可以实时的获取变化的数据和消息,对消息进行处理后可以立刻存回kafka,等待其它Consumers调用。

    • 最后是左侧的connectors,通过它,你可以将kafka与不同的数据库或App联通,实现海量数据导入kafka或者从kafka导出。

    总结一下,简单说,kafka是一个企业级的消息分发处理系统,可以帮助企业很好的进行多个系统间的消息事务处理,同时支持实时的流处理。

    2.2. Zookeeper & Broker

    kafka-communication.png

    它们的关系主要包括下面三点:

    1. Broker 连接 Zookeeper - for controller election,controller 维护 leader/follower关系.
    2. Brokers 互相连接 - for replication etc.
    3. Consumer/Producer 必须能连接每个 Broker - for reading/writing data etc.

    2.3. Topic & Partition

    数据写入topic,而topic是一个逻辑概念,实际写入partition。每个主题至少有一个分区,主题只是一组命名的分区,而分区才是实际上的数据流。应用通常只向主题发送或订阅消息,每个分区内部消息是有序的,通过 offset 维护消息序号。

    ktdg 0105

    2.4. Partitions & Consumer

    消费者需要知道应该处理哪个分区上的数据[from Zookeeper(topic) and Brokers(leader)],以便相同消费群组中的消费者互不干扰。对于每个消费群组包含的消费者数量需小于分区数量,否则有些消费者将没有分区可以处理。为了均衡消费者的处理能,通常将分区数量配置为消费者的整数倍。

    ktdg 0106

    2.5. Rebalance

    为了提高对数据的消费能力,重新调整partitions 与 consumers的关系,这就是在平衡,具体如下图。


    rebalance.png

    3 应用场景

    kafka_scenario.png

    3.1. 消息系统

    作为内部系统中间件,消息解耦使用。

    3.2. 存储系统

    接受外部传入的大量数据,等待内部应用程序消费,利用了Kafka高I/O特性,用来削峰。

    3.3. 流处理

    利用stream API,或者 stream lib 直接处理流数据。这是一种轻量级的解决方案。(以前会使用spark,storm,flink)

    4 Kafka安装环境

    kafka_setup.png

    4.1. 物理机

    官网建议 Kafka 安装在物理机上,并且配有多硬盘。具体配置:

    dual quad-core Intel Xeon machines with 24GB of memory, 8x7200 rpm SATA drives.

    4.2. kafka in kubernetes

    为了解决Kafka运维问题,把它迁移到K8S平台,通过Helm部署,目前它还不是一个成熟方案.

    5 参考文档

    Apache Kafka

    Kafka中文版官网翻译

    Kafka: The Definitive Guide by Gwen Shapira, Neha Narkhede, Todd Palino

    Apache Kafka on Kubernetes – Could You? Should You?

    Getting Started with Apache Kafka and Kubernetes

    Kafka on K8S 在携程的解决方案

    Kafka 是什么?

    kafka的网络络结构

    Kafka最佳实践 - 参数配置: https://cloud.tencent.com/developer/article/1172050

    Why is Zookeeper necessary for Apache Kafka? https://www.cloudkarafka.com/blog/2018-07-04-cloudkarafka_what_is_zookeeper.html

    相关文章

      网友评论

          本文标题:Kafka学习笔记

          本文链接:https://www.haomeiwen.com/subject/yxxaeqtx.html