在流式计算中,Kafka通常用来缓存数据,Storm经过消费Kafka的数据进行计算。apache
Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。bootstrap
Kafka最初是由LinkedIn公司开发,并于 2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统1、高通量、低等待的平台。api
Kafka是一个分布式消息队列。Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每一个实例(server)成为broker。缓存
不管是kafka集群,仍是producer和consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性。异步
下载地址:kafka.apache.org/downloads分布式
演示版本号: kafka_2.11-0.11.0.2ide
在此感谢Apache基金会对开源社区的巨大贡献oop
$ tar -zxvf kafka_2.11-0.11.0.2.tgz -C ./
复制代码
$ mkdir kafkaLogs
$ vi config/server.properties
#打开注释, 表示, topic能够删除
delete.topic.enable=true
# zookeeper地址:多个是用 "," 隔开
zookeeper.connect=hadoop106:2181,hadoop107:2181,hadoop108:2181
#设置位置标识(这里我配置的是我机器的ip号)
broker.id=106
#设置log生成地址(绝对路径)
log.dirs=/opt/module/kafka_2.11-0.11.0.2/kafkaLogs
复制代码
退出vi学习
scp 分发到其余机器上, 注意: broker.id的其余机器上须要修改, 集群中必须惟一.spa
$ bin/kafka-server-start.sh config/server.properties 1>dev/null 2>&1
复制代码
$ bin/kafka-server-stop.sh
复制代码
$ bin/kafka-topic.sh --zookeeper hadoop106:2181 --create --replication-factor 3 --partitions 3 --topic topic_name
1.replication-factor : 副本数量
2.partitions : 分区数量
3.topic : 定义topic名称
复制代码
$ bin/kafka-topic.sh --zookeeper hadoop106:2181 --list
复制代码
$ bin/kafka-topic.sh --zookeeper hadoop106:2181 --delete --topic topic_name
复制代码
$ bin/kafka-console-producer.sh --broker-list hadoop106:9092 --topic topic_name
复制代码
$ bin/kafka-console-consumer.sh --zookeeper hadoop106:2181 --from-beginning --topic topic_name
复制代码
注: 因为执行上一条命令出现警告, 缘由是api过时
Using the ConsoleConsumer with old consumer is deprecated and will be removed in a future major release. Consider using the new consumer by passing [bootstrap-server] instead of [zookeeper].
咱们能够执行一下操做
$ bin/kafka-console-consumer.sh --bootstrap-server hadoop107:9092 --topic topic_name --from-beginning
复制代码
$ bin/kafka-topics.sh --zookeeper hadoop106:2181 --describe --topic topic_name
复制代码
在部署kafka应用是, 须要注意的是, kafka和zookeeper是强依赖关系, 必须配合zookeeper集群部署, 这里只是简单部署引用和演示, 具体方便若是想深究的话, 各位小伙伴能够结合官方开发文档, 协助开发学习, 后期还会加入kafka streaming的方法演示, 请期待...
kafka的模型, 和rokectMQ基本一致, 生产者在写入消息过程当中, 会根据该消息的topic的生产过程当中设置的属性, 写入到分区中, 理论上分区是partition Log, 消息会将数据写入到Log日志中, 因为消息是异步发送的, 并且是顺序消费, 每个分区都是一个独立的, 有序的, 不可变的记录序号列, 因此分区带来的是很高的扩展性, 分区会根据数据的大小长度, 进行分区消费.
在分布式的集群中, 数据副本能够起到集群宕机的状况下, 其余机器能够正常的消费, 不影响应用的消费, 在没有副本的状态下, 一旦broker.id宕机, 那么可能致使生产应用的崩溃或者业务数据的丢失等等, 为了不这种状况, 咱们能够进行分区, 同时producer也不能再将数据存于其上的patition, 引入replication以后,同一个partition可能会有多个replication,而这时须要在这些replication之间选出一个leader,producer和consumer只与这个leader交互,其它replication做为follower从leader 中复制数据.