Kafka 搭建实录

164 阅读3分钟

Kafka 搭建实录

1515111-20191128124853636-833212813.png

简介

  • kafka是什么?

    Kafka是由Apache软件基金会 开发的一个开源流处理平台,由Scala和Java编写。该项目的目标是为处理实时数据提供一个统一、高吞吐、低延迟的平台。其持久化层本质上是一个“按照分布式事务日志架构的大规模发布/订阅消息队列”,这使它作为企业级基础设施来处理流式数据非常有价值。此外,Kafka可以通过Kafka Connect连接到外部系统(用于数据输入/输出),并提供了Kafka Streams——一个Java流式处理库。

  • 基本概念

    • Broker

      Kafka集群包含一个或多个服务器,这种服务器被称为broker。broker端不维护数据的消费状态,提升了性能。直接使用磁盘进行存储,线性读写,速度快:避免了数据在JVM内存和系统内存之间的复制,减少耗性能的创建对象和垃圾回收。

    • Producer

      负责发布消息到Kafka broker

    • Consumer

      消息消费者,向Kafka broker读取消息的客户端,consumer从broker拉取(pull)数据并进行处理。

    • Topic

      每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个broker上但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)

    • Partition

      Parition是物理上的概念,每个Topic包含一个或多个Partition.

    • Consumer Group

      每个Consumer属于一个特定的Consumer Group(可为每个Consumer指定group name,若不指定group name则属于默认的group)

    • Topic & Partition

      Topic在逻辑上可以被认为是一个queue,每条消费都必须指定它的Topic,可以简单理解为必须指明把这条消息放进哪个queue里。为了使得Kafka的吞吐率可以线性提高,物理上把Topic分成一个或多个Partition,每个Partition在物理上对应一个文件夹,该文件夹下存储这个Partition的所有消息和索引文件。

环境要求

  • 下载安装 java 8
  • 从官网下载Kafka Binary版本,解压,下载链接:kafka.apache.org/downloads.h…

    • kafka_2.11-1.0.1.tgz

    • Kafka目录结构如下:

      • bin: 二进制文件,各类脚本
      • config: 各类配置文件
      • libs: Kafka的依赖库
      • site-docs: 保存文档
      • logs(Kafka启动后出现): 保存Kafka运行日志

服务启动

  • 启动zookeeper

    • 修改配置文件:修改config目录下的zookeeper.properties文件,关键属性:

      image2018-8-7 11_47_15.png

      • dataDir:zookeeper数据文件存放目录(非kafka数据文件)
      • clientPort:zookeeper监听端口
      • 启动zookeeper服务:

        nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
        
  • 启动kafka

    • 修改配置文件:修改config目录下的server.properties文件,关键属性(有些属性配置文件中默认没有,需自己添加): image2018-8-7 11_49_20.png

      • broker.id:Kafka集群中每台机器(称为broker)需要独立不重的id

      • delete.topic.enable:设为true则允许删除topic,否则不允许

      • port:监听端口

      • log.dirs:Kafka数据文件的存放目录

      • zookeeper.connect:负责管理Kafka的zookeeper集群的机器名:端口号,多个用逗号分隔。

      • zookeeper集群,例:hostname1:port1,hostname2:port2,hostname3:port3/chroot/path

      • 启动Kafka:

        bin/kafka-server-start.sh -daemon config/server.properties
        

常用命令:

  • 启动kafka

    bin/kafka-server-start.sh -daemon /config/server.properties
    

    停止kafka

    bin/kafka-server-stop.sh
    
  • 建立topic:

    bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic title-topic
    
  • 查看当前topic列表

    bin/kafka-topics.sh --list --zookeeper ip:port,ip:port,ip:port
    
  • 查看某topic

    bin/kafka-topics.sh --describe --topic topic_test --zookeeper ip:port,ip:port,ip:port
    
  • 赋予producer和consumer权限

    bin/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=ip:port,ip:port,ip:port --add --allow-principal User:* --producer --topic topic_test
    
    bin/kafka-acls.sh --authorizer kafka.security.auth.SimpleAclAuthorizer --authorizer-properties zookeeper.connect=ip:port,ip:port,ip:port --add --allow-principal User:* --consumer --topic topic_test --group '*'
    
  • 赋予cluster权限

    bin/kafka-acls --authorizer-properties zookeeper.connect=localhost:2181 --add --allow-principal User:* --operation ALL --cluster
    
  • 显示某个topic的acl权限

    bin/kafka-acls.sh --authorizer-properties zookeeper.connect=ip:port,ip:port,ip:port --list --topic topic_test
    
  • 单个pub/sub

    bin/kafka-console-producer.sh --broker-list ip:port,ip:port,ip:port --topic topic_test --producer.config config/producer.properties
    
    bin/kafka-console-consumer.sh --bootstrap-server ip:port,ip:port,ip:port --topic topic_test --consumer.config config/consumer.properties --from-beginning
    
  • 查看是否有under-replicated-partitions

    bin/kafka-topics.sh --zookeeper ip:port,ip:port,ip:port --describe --under-replicated-partitions
    
  • 批量发送消息

    bin/kafka-producer-perf-test.sh --num-records 10000 --record-size 256 --throughput 10 --topic topic_test --producer-props acks=-1 bootstrap.servers=ip:port,ip:port,ip:port --producer.config config/producer.properties --print-metrics
    
    bin/kafka-consumer-perf-test.sh --broker-list ip:port,ip:port,ip:port --messages 10000 --threads 1 --topic topic_test --consumer.config config/consumer.properties --print-metrics
    

参考