4 Kafka配置


简介

Kafka是分布式发布-订阅消息系统。它最初由LinkedIn公司开发,之后成为Apache项目的一部分。Kafka是一个分布式的,可划分的,冗余备份的持久性的日志服务。它主要用于处理活跃的流式数据。

在大数据系统中,常常会碰到一个问题,整个大数据是由各个子系统组成,数据需要在各个子系统中高性能,低延迟的不停流转。传统的企业消息系统并不是 非常适合大规模的数据处理。为了已在同时搞定在线应用(消息)和离线应用(数据文件,日志)Kafka就出现了。

Kafka可以起到两个作用:

  • 降低系统组网复杂度。
  • 降低编程复杂度,各个子系统不在是相互协商接口,各个子系统类似插口插在插座上,Kafka承担高速数据总线的作用。

Kafka主要特点:

  1. 同时为发布和订阅提供高吞吐量。据了解,Kafka每秒可以生产约25万消息(50 MB),每秒处理55万消息(110 MB)。
  2. 可进行持久化操作。将消息持久化到磁盘,因此可用于批量消费,例如ETL,以及实时应用程序。通过将数据持久化到硬盘以及replication防止数据丢失。
  3. 分布式系统,易于向外扩展。所有的producer、broker和consumer都会有多个,均为分布式的。无需停机即可扩展机器。
  4. 消息被处理的状态是在consumer端维护,而不是由server端维护。当失败时能自动平衡。

设计要点

  1. 直接使用Linux 文件系统的cache,来高效缓存数据。
  2. 采用Linux Zero-Copy提高发送性能。传统的数据发送需要发送4次上下文切换,采用send file系统调用之后,数据直接在内核态交换,系统上下文切换减少 为2次。根据测试结果,可以提高60%的数据发送性能。Zero-Copy详细的技术细节可以参考:https://www.ibm.com/developerworks/linux/library/j-zerocopy/
  3. 数据在磁盘上存取代价为O(1)。Kafka以topic来进行消息管理,每个topic包含多个part(ition),每个part对应一 个逻辑log,有多个segment组成。每个segment中存储多条消息,消息id由其逻辑位置决定,即从消息id可直接定位到消息的存储 位置,避免id到位置的额外映射。每个part在内存中对应一个index,记录每个segment中的第一条消息偏移。发布者发到某个topic的消息 会被均匀的分布到多个part上(随机或根据用户指定的回调函数进行分布),broker收到发布消息往对应part的最后一个segment上添加该消 息,当某个segment上的消息条数达到配置值或消息发布时间超过阈值时,segment上的消息会被flush到磁盘,只有flush到磁盘上的消息 订阅者才能订阅到,segment达到一定的大小后将不会再往该segment写数据,broker会创建新的segment。
  4. 显式分布式,即所有的producer、broker和consumer都会有多个,均为分布式的。Producer和broker之间没有负 载均衡机制。broker和consumer之间利用zookeeper进行负载均衡。所有broker和consumer都会在zookeeper中进 行注册,且zookeeper会保存他们的一些元数据信息。如果某个broker和consumer发生了变化,所有其他的broker和 consumer都会得到通知。

下载安装Kafka

官网:http://kafka.apache.org/downloads或者http://archive.apache.org/dist/kafka/

Linux安装

  • 解压kafka到指定目录(这里指定到/usr/local/kafka,自行修改)(tar -zxvf kafka_2.11-2.2.2.tgz)

    找到broker.id并修改为1(如果是多个kafka服务,需配置不同broker.id作为标识)

    broker.id=1

    找到log.dirs并修改为指定路径(自行修改)

    以后kafka产生的日志都会存在此路径

    log.dirs=/usr/local/kafka/kafka_log

Q.E.D.