Kafka 搭建实录
简介
-
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文件,关键属性:
- dataDir:zookeeper数据文件存放目录(非kafka数据文件)
- clientPort:zookeeper监听端口
-
启动zookeeper服务:
nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
-
-
启动kafka
-
修改配置文件:修改config目录下的server.properties文件,关键属性(有些属性配置文件中默认没有,需自己添加):
-
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_testbin/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.propertiesbin/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-metricsbin/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