简介
Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端点传递到另一个端点。 Kafka适合离线和在线消息消费。 Kafka消息保留在磁盘上,并在集群内复制以防止数据丢失。 Kafka构建在ZooKeeper同步服务之上。 它与Apache Storm和Spark非常好地集成,用于实时流式数据分析。
Kafka的优点
- 高吞吐率:在廉价的商用机器上单机可支持每秒百万条消息的读写
- 消息持久化:所有消息均被持久化到磁盘,无消息丢失,支持消息重放
- 完全分布式:Producer、Broker、Consumer均支持水平扩展
- 同时适应在线流处理和离线批处理
Kafka的应用场景
- 日志收集:Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer
- 消息系统:解耦生产者和消费者、缓存消息等
- 监控处理:kafka也通常用来操作监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告
- 流式处理:比如spark streaming和storm;Kafka的强耐久性在流处理的上下文中也非常有用
基本概念介绍
- Broker:负责维护发布数据的简单系统,即一个kafka;多个Broker构成一个kafka cluster
- Producer:发送给一个或多个Kafka主题的消息的发布者,通过Broker发布新的消息到Topic中
- Consumer:Kafka的真实消费者,从某个Topic中获取消息
- Topic:特定类别的消息流
- Partition:它是 Topic 在物理上的分组, 多个 Partition 会被分散地存储在不同的 Kafka 节点上; 单个 Partition 的消息是保证有序的, 但整个 Topic 的消息就不一定是有序的
- Segment:包含消息内容的指定大小的文件, 由 index 文件和 log 文件组成; 一个 Partition 由多个 Segment 文件组成
- Offset:Segment 文件中消息的索引值, 从 0 开始计数
- Replicas of partition:副本只是一个分区的"备份"。它们用于防止数据丢失。每个 Partition 都会有 N 个完全相同的冗余备份, 这些备份会被尽量分散存储在不同的机器上
Kafka集群架构
Kafka安装使用
安装JDK:
yum install -y java-1.8.0-openjdk-devel.x86_64
安装zookeeper:
# 下载安装包、解压
wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
tar -zxf zookeeper-3.4.13.tar.gz -C /opt/
# 启动Zookeeper
sh /opt/zookeeper-3.4.13/bin/zkServer.sh start-foreground conf/zoo_sample.cfg
# 查看zookeeper状态
sh /opt/zookeeper-3.4.13/bin/zkServer.sh status /opt/zookeeper-3.4.13/conf/zoo_sample.cfg
ZooKeeper JMX enabled by default
Using config: conf/zoo_sample.cfg
Mode: standalone
安装Kafka
# 下载安装包、解压
wget http://mirrors.shuosc.org/apache/kafka/2.1.1/kafka_2.11-2.1.1.tgz
tar -zxf kafka_2.11-2.1.1.tgz -C /opt
# 启动kafka的时候需要先创建kafka的数据目录,默认是/tmp/kafka-logs
mkdir -p /tmp/kafka-logs
# 启动kafka
sh /opt/kafka_2.11-2.1.1/bin/kafka-server-start.sh /opt/kafka_2.11-2.1.1/config/server.properties
# 检验Kafka
——> jps
6224 QuorumPeerMain
6291 Kafka
10101 Jps
Kafka操作练习
# 创建Topic
sh /opt/kafka_2.11-2.1.1/bin/kafka-topics.sh --zookeeper localhost:2181 --create --topic test --partitions 3 --replication-factor 1
# 查看所有Topic
sh /opt/kafka_2.11-2.1.1/bin/kafka-topics.sh --zookeeper localhost:2181 --list
# 查看某个Topic的详细信息
sh /opt/kafka_2.11-2.1.1/bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic test
# 删除Topic
sh /opt/kafka_2.11-2.1.1/bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic test
# 启动producer发送消息
sh /opt/kafka_2.11-2.1.1/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test1
启动之后可以输入消息内容
# 启动Consumer消费消息
sh /opt/kafka_2.11-2.1.1/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test1 --from-beginning
可以看到刚刚producer生产的消息内容
另附加一个由于kafka版本不同可能会误导的问题:
使用命令bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning
启动消费者时,会报错zookeeper is not a recognized option
。
原因是在新版本中这个启动方式已经被删除,新版本的启动方式为bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test1 --from-beginning