kafka 简介与集群环境搭建

kafka 特性

高吞吐量

  • 内存访问:使用linu文件系统Cache缓存数据,高速缓存数据,对数据进行读写
  • 数据持久化到磁盘:消息从Cache 直接写入磁盘,充分利用磁盘顺序读写性能
  • 零拷贝:减少IO操作,数据从内核层面进行交换,减少了上下文切换
  • 消息处理方式:支持批量发送、支持压缩
  • Tpoic分区:划分为多个分区,并行的写入/读取消息,提高了吞吐。
  • 高吞吐:kafka每秒可以生产约25的消息(50MB),每秒处理55万消息(110MB)

负载均衡

  • 生产者根据用户指定算法,消息发送到指定partition
  • 一个topic 多个partition(分区),每个partition 有自己副本,每个副本分部到不同broker 上
  • 多个partition 选举出leader partition 负责数据读写,zookeeper 负责是故障切换
  • 消费者与生产者加入与离开,有zookeeper 负责

可扩展性

  • 不停机扩展,新增broker 加入集群注册到zookeeper,生产者与消费者通过zookeeper的监听机制,做出响应的调整

应用场景

  • 消息队列:适用于高吞吐量,低延时
  • 行为追踪:记录用户踪迹,写入消息队列,由消费者实时分析,或者大数据离线处理(支持在线与离线场景)
  • 日志收集
  • 元信息监控
  • 流处理

概念

  • Topic:不同消息的分类,kafka是以topic 进行消息分类的
  • Partition:Topic是一个逻辑概念,而Partition则是Topic 物理上的分组,一个topic可以分为多个partition,每个partition 是一个有序的队列。partition中的每条消息都会被分配一个有序的 id(offset)
  • Message:消息,是通信的基本单位,每个partition可以向一个topic 发布一些消息
  • Producers:消费的生产者
  • Consumers:消息和数据消费者,也是订阅Topic 并处理其发布的消息的过程
  • Broker:缓存代理,Kafka 集群中的一台或多台服务器统称为broker

消息处理

  • 多个partion 有一个leader partition 负责消息读写,主挂了之后,从副本读取,配置信息由zookeeper 维护
  • 一条消息只能被一个组里的一个消费者消费,不同组的消费可以重复消费一条消息
  • 消费者数量与partition 数量一致时,效率最高,消费者多时,造成线程浪费,消费者少时,造成partition 消费等待

环境

服务器说明
192.168.1.206zookeeper,kafka
192.168.1.207zookeeper,kafka
192.168.1.208zookeeper,kafka

安装

安装zookeeper

  • 下载解压
wget https://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.6.1/apache-zookeeper-3.6.1-bin.tar.gz
tar -xzvf  apache-zookeeper-3.6.1-bin.tar.gz -C /usr/local/
  • 配置
    安装目录conf 下把zoo_simple.cfg 修改为zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=./data
clientPort=2181
server.1=192.168.1.206:2881:3881
server.2=192.168.1.207:2881:3881
server.3=192.168.1.208:2881:3881
  • 启动
/bin/zkServer.start 

安装kafka

  • 下载解压
# 下载kafka
wget http://mirror.bit.edu.cn/apache/kafka/2.4.0/kafka_2.13-2.4.0.tgz
tar -zxvf kafka_2.13-2.4.0.tgz -C /usr/local/
  • 修改配置
    conf/server.properties
# kafka的节点编号,唯一的整数,服务编号,在集群中不能一样
broker.id=1
# v2.4默认topic是可以删除的,这里可以配置成fasle,关闭不让删除
delete.topic.enable=true
port=9092
# 如果需要通过外部网络连接kafka,则需要配置这个项目,ip就是本机外网ip,端口就是本机kafka端口
advertised.listeners=PLAINTEXT://192.168.1.206:9092
# 处理网络请求的线程数量
num.network.threads=3
# 处理磁盘I/O的线程数量
num.io.threads=8
# 发送socket的缓冲区大小
socket.send.buffer.bytes=102400
# 接收socket的缓冲区大小
socket.receive.buffer.bytes=102400
# 请求socket的缓冲区大小
socket.request.max.bytes=104857600
# topic的默认分区数
num.partitions=2
# 暂存数据的保存地址
log.dirs=./data
# 一个log文件最大的大小,这里默认1G
log.segment.bytes=1073741824
# 数据暂存多少小时,默认7天
log.retention.hours=168
# zookeeper集群地址
zookeeper.connect=192.168.1.206:2181,192.168.1.207:2181,192.168.1.208:2181

  • 启动
# 启动命令,kafka的启动命令在安装包的bin目录下
./kafka-server-start.sh -daemon ../config/server.properties
# 关闭服务
./kafka-server-stop.sh ../config/server.properties

剩下两台机器同样配置,broker.id 要改一下
kafka 安装完成了

测试

创建Topic

# 查看当前服务器中所有的topic
./kafka-topics.sh --zookeeper 192.168.1.206:2181,192.168.1.207:2181,192.168.1.208:2181 --list
# 创建topic,replication-factor 副本数,副本数量不能大于broker数量,partitions 分区数
./kafka-topics.sh --zookeeper 192.168.1.206:2181,192.168.1.207:2181,192.168.1.208:2181  --create --replication-factor 1 --partitions 2 --topic topic_test
# 删除topic
./kafka-topics.sh --zookeeper 192.168.1.206:2181,192.168.1.207:2181,192.168.1.208:2181 --delete --topic topic_test
#查看topic详情
./kafka-topics.sh --zookeeper 192.168.1.206:2181,192.168.1.207:2181,192.168.1.208:2181  --describe --topic topic_test
# 修改topic分区数
./kafka-topics.sh --zookeeper 192.168.1.206:2181,192.168.1.207:2181,192.168.1.208:2181  --alter --topic topic_test --partitions 4

生产/消费测试

# 发送消息,如果broker是集群,那么broker-listke可以多个ip:port,ip:port的形式
./kafka-console-producer.sh --topic topic_test --broker-list 192.168.1.206:9092,192.168.1.207:9092,192.168.1.208:9092
# 接收消息
# --bootstrap-server后面也可以填入ip:port,ip:port的形式
# --from-beginning将消息队列中所有发送过来的消息都取出来
# 如果不加--from-beginning只有新消息才会接收,发送过的就不接收了
./kafka-console-consumer.sh --topic topic_test --from-beginning --bootstrap-server 192.168.1.206:9092,192.168.1.207:9092,192.168.1.208:9092

kafka 集群全部搭建完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值