一.kafka简介
1. 订阅发布消息系统,解耦发布者和订阅者。
原有的直连消息模型
发布订阅系统
2. 基本概念
1) 生产者和消费者 producer/consumer
生产者创建消息,消费者读取消息。实现时间上的解耦。
2) 主题和分区 topic/partition
Kafka的消息通过主题分类。同一个主题可以放在不同分区中。
3) 容器 broker
一个独立的kafka服务器就是一个容器(broker)。多个broker构成一个集群,集群中有一个首领(leader),其他broker从属于首领(leader)。一个分区可以分配给多个broker提供消息冗余,如果一个broker失效,其他可以接替他的工作。如果leader失效会产生新的leader。
3. Kafka优势:
1) 多个生产者
2) 多个消费者
3) 基于磁盘存储
4) 伸缩性
5) 高性能
二.安装kafka broker
1. 前提准备
需要安装java, zookeeper。下载kafka安装包。官方地址:http://kafka.apache.org/downloads.html
2. 安装kafka broker
1) 解压缩
#tar –zxf kafka_x.xx.tgz
2) 设置日志路径:
#mkdir /tmp/kafka-logs
3) 配置kafka/config/server.properties
主要参数:
broker.id 集群中的broker.id不能重复
prot 监听端口,默认为9902
zookeeper.connect 保存broker元数据和主题的zookeeper地址,默认localhost:2181。可以设置路径,格式为hostname:port/path,默认根目录。
log.dirs 日志保存路径
num.recovery.threads.per.data.dir 每个日志目录启动的线程数,需要启动的线程数为log.dirs设置的目录数* num.recovery.threads.per.data.dir。
auto.create.topics.enable 自动创建主题
4) 启动
#bin/kafka-server-start.sh config/server.properties
指定配置文件启动。
三.Kafka工具和命令
在kafka/bin目录下包含了kafka的一些工具,根据工具可以学习和调试kafka的功能。具体如下图:
对应这些工具的kafka常用命令如下:
1. 启动kafka服务
bin/kafka-server-start.sh config/server.properties &
2. 关闭kafka服务
bin/kafka-server-stop.sh
3. 查看主题topics
[root@dn1 bin]# ./kafka-topics.sh--list -zookeeper dn1
ATLAS_ENTITIES
ATLAS_HOOK
__consumer_offsets
ambari_kafka_service_check
4. 添加主题topic
[root@dn1 bin]# ./kafka-topics.sh --create --zookeeperdn1:2181,dn2:2181 --replication-factor 1 --partitions 1 --topic test
Created topic "test"
5. 查看topic描述
[root@dn1 bin]# ./kafka-topics.sh--describe --zookeeper localhost:2181 --topic test
Topic:test PartitionCount:1 ReplicationFactor:1 Configs:
Topic: test Partition: 0 Leader: 1001 Replicas: 1001 Isr: 1001
6. 生产者发布消息
[root@dn1 bin]# ./kafka-console-producer.sh --broker-listdn1:6667,dn2:6667 --topic test
OSendMessage 1
Send Message 2
7. 消费者读取消息
[root@dn1bin]# ./kafka-console-consumer.sh --zookeeper dn1:2181,dn2:2181 --topic test--from-beginning
Using theConsoleConsumer with old consumer is deprecated and will be removed in a futuremajor release. Consider using the new consumer by passing [bootstrap-server]instead of [zookeeper].
{metadata.broker.list=dn1.hadoop:6667,request.timeout.ms=30000, client.id=console-consumer-9264,security.protocol=PLAINTEXT}
SendMessage 1
Send Message 2
8. 查看消费者分组
[root@dn1bin]# ./kafka-consumer-groups.sh --list --zookeeper dn1:2181
console-consumer-38656
console-consumer-40076
console-consumer-6266
console-consumer-9910
9. 查看消息的偏移量、校验和、魔术数字节、消息大小和压缩算法
[root@dn1 bin]# ./kafka-run-class.shkafka.tools.ConsumerOffsetChecker --zookeeper dn1:2181 --groupconsole-consumer-9910 --topic test
[2018-05-23 09:57:18,054] WARN WARNING: ConsumerOffsetChecker isdeprecated and will be dropped in releases following 0.9.0. UseConsumerGroupCommand instead. (kafka.tools.ConsumerOffsetChecker$)
Group Topic Pid Offset logSize Lag Owner
console-consumer-9910test 0 47 50 3 none