Kafka学习笔记1

1 kafka快速上手

1.1 kafka基本概念

Kafka是由Apache软件基金会开发的一个开源流处理平台,由ScalaJava编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。—百度百科

kafka是消息中间件的一种,也可以理解为消息队列,消息引擎等概念。

在实时处理方面,配合spark streaming,flink等也是一个非常好用和流行的实时流处理平台。

1.2 kafka的组件介绍

Producer:消息生产者,就是向kafka broker发消息的客户端。

Consumer:消息消费者,向kafka broker取消息的客户端。

Topic :主题,生产者和消费者面向的都是主题。

Offset:Topic中的消息都有一个唯一序列号,也就是offset。在旧版本的kafka中,offset由zookeeper管理,在0.10之后,默认由kafka自己管理。

Consumer Group (CG):消费者组,kafka记录的offset是消费者组级别的,也就是同一个消费者组下的消费者使用同一个offset。

Broker :一台kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。

1.3 kafka集群部署

1、下载安装包

不要下载src或者source的,那是源文件

http://kafka.apache.org/downloads

或者在linux中使用wget命令下载安装包

wget http://mirrors.hust.edu.cn/apache/kafka/1.1.0/kafka_2.11-1.1.0.tgz

2、解压安装包

tar -zxvf kafka_2.11-1.1.0.tgz 
重命名为kafka

3、修改配置文件

进入配置文件目录(每个节点都要配置)

cd kafka/config
每个kafka broker中配置文件server.properties默认必须配置的属性如下:

broker.id=0
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=1048576
socket.receive.buffer.bytes=1048576
socket.request.max.bytes=104857600
log.dirs=/tmp/kafka-logs
num.partitions=2
log.retention.hours=168
 
log.segment.bytes=536870912
log.retention.check.interval.ms=60000
log.cleaner.enable=false
 
zookeeper.connect=localhost:2181
zookeeper.connection.timeout.ms=1000000

修改server.properties,参考:

#broker的全局唯一编号,不能重复(集群每个节点的server.properties理论上只有broker.id不同)
broker.id=0

#用来监听链接的端口,producer或consumer将在此端口建立连接
port=9092

#处理网络请求的线程数量
num.network.threads=3

#用来处理磁盘IO的线程数量
num.io.threads=8

#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400

#接受套接字的缓冲区大小
socket.receive.buffer.bytes=102400

#请求套接字的缓冲区大小
socket.request.max.bytes=104857600

#kafka消息存放的路径
log.dirs=/export/servers/logs/kafka

#topic在当前broker上的分片个数
num.partitions=2

#用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1

#segment文件保留的最长时间,超时将被删除
log.retention.hours=168

#滚动生成新的segment文件的最大时间
log.roll.hours=168

#日志文件中每个segment的大小,默认为1G
log.segment.bytes=1073741824

#周期性检查文件大小的时间
log.retention.check.interval.ms=300000

#日志清理是否打开
log.cleaner.enable=true

#broker需要使用zookeeper保存meta数据
zookeeper.connect=192.168.52.106:2181,192.168.52.107:2181,192.168.52.108:2181

#zookeeper链接超时时间
zookeeper.connection.timeout.ms=6000

#partion buffer中,消息的条数达到阈值,将触发flush到磁盘
log.flush.interval.messages=10000

#消息buffer的时间,达到阈值,将触发flush到磁盘
log.flush.interval.ms=3000

#删除topic需要server.properties中设置delete.topic.enable=true否则只是标记删除
delete.topic.enable=true

#此处的host.name为本机IP(重要),如果不改,则客户端会抛出:Producer connection to localhost:9092 unsuccessful 错误!
host.name=kafka01

每个节点的server.properties都要配置好

6、启动集群

依次在每个节点启动(要保证zookeeper已经启动)

后台启动方式有两种,更推荐第2种命令
1.nohup bin/kafka-server-start.sh config/server.properties &
2.bin/kafka-server-start.sh -daemon config/server.properties

如果你没有部署zookeeper,可以使用bin/zookeeper-server-start.sh来启动,使用到的zookeeper.properties可以简单配置如下

dataDir=/tmp/zookeeper
clientPort=2181
maxClientCnxns=0

1.4 kafka的常用操作命令

查看当前服务器中的所有topic

bin/kafka-topics.sh --list --zookeeper node01:2181

创建topic

bin/kafka-topics.sh --create --zookeeper node01:2181 --replication-factor 1 --partitions 1 --topic test

删除topic(需要server.properties中设置delete.topic.enable=true否则只是标记删除或者直接重启)

bin/kafka-topics.sh --delete --zookeeper node01:2181 --topic test

控制台发送(生产)消息

bin/kafka-console-producer.sh --broker-list node01:9092 --topic test1

控制台接收(消费)消息

bin/kafka-console-consumer.sh --zookeeper node01:2181 --from-beginning --topic test1

查看消费位置

bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --zookeeper node01:2181 --group testGroup

查看某个Topic的详情

bin/kafka-topics.sh --topic test --describe --zookeeper node01:2181

对分区数进行修改

bin/kafka-topics.sh --zookeeper  node01 --alter --partitions 15 --topic utopic

注:如有错误,欢迎指正

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页