kafka的基本介绍

144 阅读3分钟

「这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战

什么是Kafka

官网:kafka.apache.org/

Kafka是最初由Linkedin公司开发,是一个分布式、分区的、多副本的、多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可以用于web/nginx日志、访问日志,消息服务等等,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目。

主要应用场景是:日志收集系统和消息系统。

Kafka主要设计目标如下:

  • 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能。
    • 算法复杂度:时间复杂度和空间复杂度
    • 以时间复杂度为O(1)的方式:常数时间运行和数据量的增长无关,假如操作一个链表,那么无论链表的大还是小,操作时间是一样的
  • 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输。
    • 支持普通服务器每秒百万级写入请求
    • Memory mapped Files
  • 支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输。
  • 同时支持离线数据处理和实时数据处理。
  • Scale out:支持在线水平扩展

kafka的特点

  • 解耦。Kafka具备消息系统的优点,只要生产者和消费者数据两端遵循接口约束,就可以自行扩展或修改数据处理的业务过程。
  • 高吞吐量、低延迟。即使在非常廉价的机器上,Kafka也能做到每秒处理几十万条消息,而它的延迟最低只有几毫秒。
  • 持久性。Kafka可以将消息直接持久化在普通磁盘上,且磁盘读写性能优异。
  • 扩展性。Kafka集群支持热扩展,Kaka集群启动运行后,用户可以直接向集群添。
  • 容错性。Kafka会将数据备份到多台服务器节点中,即使Kafka集群中的某一台加新的Kafka服务节点宕机,也不会影响整个系统的功能。
  • 支持多种客户端语言。Kafka支持Java、.NET、PHP、Python等多种语言。
  • 支持多生产者和多消费者。

kafka的主要应用场景

  • 消息处理(MQ)

    KafKa可以代替传统的消息队列软件,使用KafKa来实现队列有如下优点

    • KafKa的append来实现消息的追加,保证消息都是有序的有先来后到的顺序,
    • 稳定性强队列在使用中最怕丢失数据,KafKa能做到理论上的写成功不丢失
    • 分布式容灾好
    • 容量大相对于内存队列,KafKa的容量受硬盘影响
    • 数据量不会影响到KafKa的速度
  • 分布式日志系统(Log)

    在很多时候我们需要对一些庞大的数据进行存留,日志存储这块会遇到巨大的问题,日志不能丢,日志存文件不好找,定位一条消息成本高(遍历当天日志文件),实时显示给用户难,这几类问题KafKa都能游刃有余

    • KafKa的集群备份机制能做到n/2的可用,当n/2以下的机器宕机时存储的日志不会丢失
    • KafKa可以对消息进行分组分片
    • KafKa非常容易做到实时日志查询
  • 流式处理

    流式处理就是指实时地处理一个或多个事件流。

    流式的处理框架(spark, storm , flflink) 从主题中读取数据, 对其进行处理, 并将处理后的结果数据写入新的主题, 供用户和应用程序使用,kafka的强耐久性在流处理的上下文中也非常的有用