https://www.cnblogs.com/luotianshuai/p/5206662.html
Kafka简介
Kafka是一个由LinkedIn开发的分布式消息系统,它于2011年初开源,现在由著名的Apache基金会维护与开发。Kafka使用Scala实现,被用作LinkedIn的活动流和运营数据处理的管道,现在也被诸多互联网企业广泛地用作为数据流管道和消息系统。
Kafka是基于消息发布/订阅模式实现的消息系统,其主要设计目标如下:
- 消息持久化:以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。
- 高吞吐:在廉价的商用机器上也能支持单机每秒100K条以上的吞吐量
- 分布式:支持消息分区以及分布式消费,并保证分区内的消息顺序
- 跨平台:支持不同技术平台的客户端(如:Java、PHP、Python等)
- 实时性:支持实时数据处理和离线数据处理
- 伸缩性:支持水平扩展
Kafka中涉及的一些基本概念:
- Broker:Kafka集群包含一个或多个服务器,这些服务器被称为Broker。
- Topic:逻辑上同Rabbit的Queue队列相似,每条发布到Kafka集群的消息都必须有一个Topic。(物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽然保存于一个或多个Broker上,但用户只需指定消息的Topic即可生产或消费数据而不必关心数据存于何处)
- Partition:Partition是物理概念上的分区,为了提供系统吞吐率,在物理上每个Topic会分成一个或多个Partition,每个Partition对应一个文件夹(存储对应分区的消息内容和索引文件)。
- Producer:消息生产者,负责生产消息并发送到Kafka Broker。
- Consumer:消息消费者,向Kafka Broker读取消息并处理的客户端。
- Consumer Group:每个Consumer属于一个特定的组(可为每个Consumer指定属于一个组,若不指定则属于默认组),组可以用来实现一条消息被组内多个成员消费等功能。
环境安装
1.
zookeeper下载地址: http://zookeeper.apache.org/releases.html
在解压zookeeper的安装包之后,可以看到其目录结构如下:
1 2 4 5 6 7 8 9 10 11
| zookeeper +-bin +-config +-contrib +-dist-maven +-docs lib recipes src tmp
|
配置文件conf/zoo.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=F:\\storm-jq-start\\zk\\dataDir\\1 (日志地址,windows事例)
clientPort=2181 (zookeeper启动端口)
启动
windows:
启动 zkServer.cmd (bin目录 )
linux:
启动 zkServer.sh start
使用jps命令查看,存在QuorumPeerMain进程,表示Zookeeper已经启动
停止服务 zkServer.sh stop
使用jps命令查看,QuorumPeerMain进程已不存在,表示Zookeeper已经关闭
接服务端成功,若连接不同的主机,可使用如下命令:./zkCli.sh -server ip:port
创建顺序节点 create -s /zk-test 123
创建临时节点 create -e /zk-temp 123
创建永久节点 create /zk-permanent 123
读取节点
ls path [watch] ls /
get path [watch] get /zk-permanent
ls2 path [watch] ls2 /
更新节点
set path data [version] set /zk-permanent 456
删除节点
delete path [version] delete /zk-permanent
2.
kafka下载地址为:http://kafka.apache.org/downloads.html
在解压Kafka的安装包之后,可以看到其目录结构如下:
1 2 3 4 5 6 7 | kafka +-bin +-windows +-config +-libs +-logs +-site-docs |
Kafka的设计中依赖了ZooKeeper,所以我们可以在bin
和config
目录中除了看到Kafka相关的内容之外,还有ZooKeeper相关的内容。其中bin
目录存放了Kafka和ZooKeeper的命令行工具,bin
根目录下是适用于Linux/Unix的shell,而bin/windows
下的则是适用于windows下的bat。我们可以根据实际的系统来设置环境变量,以方便后续的使用和操作。而在config
目录中,则是用来存放了关于Kafka与ZooKeeper的配置信息。
配置文件 config/server.properties
broker.id=0( 每一个broker在集群中的唯一表示,要求是正数。当该服务器的IP地址发生改变时,broker.id没有变化,则不会影响consumers的消息情况 )
port =9092 ( broker server服务端口 )
log.dirs=/tmp/kafka-logs/5 ( kafka数据的存放地址,多个地址的话用逗号分割 /data/kafka-logs-1,/data/kafka-logs-2 )
message.max.bytes =6525000 ( 表示消息体的最大大小,单位是字节 )
num.network.threads =4 (broker处理消息的最大线程数,一般情况下不需要去修改 )
num.io.threads =8 (broker处理磁盘IO的线程数,数值应该大于你的硬盘数 )
background.threads =4 (一些后台任务处理的线程数,例如过期消息文件的删除等,一般情况下不需要去做修改 )
queued.max.requests =500(等待IO线程处理的请求队列最大数,若是等待IO的请求超过这个数值,那么会停止接受外部消息,应该是一种自我保护机制。)
zookeeper.connect=localhost:2081
这里列举了一些常用的,更具体的 (http://www.cnblogs.com/liangyours/p/4971656.html)
启动
windows:
cd bin/windows目录 kafka-server-start.bat ../../config/server.properties
linux:
启动kafka
bin/kafka-server-start.sh config/server.properties
停止kafka
bin/kafka-server-stop.sh
创建 一个 topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test
查看topic
bin/kafka-topics.sh --list --zookeeper localhost:2181
生产者
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test This is a message This is another message
消费者
bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning