~ kafka

  • 设计初衷为统一信息收集平台
  • 分布式收集,统一处理
  • 可以实时处理反馈信息
  • 支持大数据
  • 高容错
  • 分布式、分区的、多副本的、多订阅者的日志系统(分布式MQ系统)
  • 消息的发布(publish)称作producer,消息的订阅(subscribe)称作consumer,中间的存储阵列称作broker。
  • ii. 多个broker协同合作,producer、consumer和broker三者之间通过zookeeper来协调请求和转发。
  • iii. producer产生和推送(push)数据到broker,consumer从broker拉取(pull)数据并进行处理。   
  • iv. broker端不维护数据的消费状态,提升了性能。  
  • v. 直接使用磁盘进行存储,线性读写,速度快:避免了数据在JVM内存和系统内存之间的复制,减少耗性能的创建对象和垃圾回收。
  • vi. Kafka使用scala编写,可以运行在JVM上。
  • java编程需要引入相关jar包
  • 详细
  • 操作
  • 启动
  • 启动zookeeper server
  • bin/zookeeper-server-start.sh config/zookeeper.properties &
  • 启动kafka server
  • bin/kafka-server-start.sh config/server.properties &
  • 组件
  • zookeeper
  • Topic/logs
  • 分类,一类消息
  • Product
  • 发送者,生产者
  • Consumer
  • 接收者
  • partition
  • append log文件
  • Offset
  • 消息在partition中的位置
  • 消息队列
  • broker
  • kafka集群中的kafka实例
  • 场景
  • Message Queue
  • 设计原理
  • 持久化
  • 文件存储+缓存批量IO
  • 性能
  • 可压缩
  • Product发送者,生产者
  • 负载均衡
  • 异步发送
  • Consumer
  • 接收者
  • API
  • high-lever
  • simple
  • 消息传送机制
  • 最多一次
  • 最少一次
  • 只有一次
  • 复制备份
  • leader
  • 负责所有读写以及监控follow
  • follow
  • 以及与leader同步
  • 所有的follow都保存成功消息才能被消费
  • 即使只有一个replicas实例存活仍然可以实现消息的正常发送接收
  • 日志
  • zookeeper
  • 主要配置
  • Broker
  • Product
  • Consumer
  • Broker部署
  • 单机
  • 集群
  • 安装
  • liunx环境
  • 安装jdk
  • vi /etc/profile在末尾追加
  • JAVA_HOME
  • JRE_HOME
  • PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
  • CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
  • source /etc/profile使环境变量立刻生效
  • ~ jdk安装
  • 安装kafka
  • 解压
  • tar -xzvf kafka_2.8.0-0.8.1.tgz ;rm kafka_2.8.0-0.8.1.tgz; cd kafka_2.8.0-0.8.1
  • 修改配置
  • Kafka默认开启JVM压缩指针,但只是在64位的HotSpot VM受支持,如果安装了32位的HotSpot VM,需要修改/bin/kafka-run-class.sh文件
  • KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:+UseCompressedOops -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSScavengeBeforeRemark -XX:+DisableExplicitGC -Djava.awt.headless=true"
  • 去除-XX:+UseCompressedOops参数
  • 启动
  • bin/zookeeper-server-start.sh config/zookeeper.properties &
  • bin/kafka-server-start.sh config/server.properties &
  • 停止
  • bin/kafka-server-stop.sh config/server.properties &
  • bin/zookeeper-server-stop.sh config/zookeeper.properties &
  • 主机topic
  • create a topic
  • 创建单partitions单replication的topic
  • bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
    bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 2 --topic test2
  • 查看topic
  • bin/kafka-topics.sh --list --zookeeper localhost:2181
  • 查看topic的分区
  • bin/kafka-topics.sh --describe --zookeeper localhost:2181
  • bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test
  • 启动生产者
  • bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
  • 启动消费者
  • bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
  • produce启动的时候参数使用的是kafka的端口而consumer启动的时候使用的是zookeeper的端口;
  • 单机连通性能测试
  • 运行producer
  • bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
  • 运行consumer
  • bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
  • 在producer端输入字符串并回车,查看consumer端是否显示。
  • 分布式连通性测试
  • 配置修改
  • bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic my-topic     --config max.message.bytes=128000
    bin/kafka-topics.sh --zookeeper localhost:2181 --alter --topic my-topic     --deleteConfig max.message.bytes
  • 查看消费者的位置
  • bin/kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --zkconnect localhost:2181 --group test
  • 删除topic与数据
  • 1) kafka-topics.sh --delete --zookeeper host:port --topic topicname
    2) 删除kafka存储目录(server.properties文件log.dirs配置,默认为"/tmp/kafka-logs")相关topic目录删除zookeeper "/brokers/topics/"目录下相关topic节点
  • 高可用
  • 重发
  • 如何确保消息的安全