kafka的版本信息: kafka_2.10-0.10.0.1 zookeeper-3.4.7
首先说明kafka里面的关键概念:
broker:kafka 集群中包含的服务器。 broker (经纪人,消费转发服务)
consumer:从 kafka 集群中消费消息的终端或服务
producer: 消息生产者,发布消息到 kafka 集群的终端或服务。
topic:每条发布到 kafka 集群的消息属于的类别,即 kafka 是面向 topic 的
partition:partition 是物理上的概念,每个 topic 包含一个或多个 partition。 kafka 分配的单位是partition。分区存储的好处是保证数据的分布式存储,而且也是有利于数据存储的负载均衡。分区的底层是队列的形式。
leader:replica 中的一个角色, producer 和 consumer 只跟 leader 交互。
follower:replica 中的一个角色,从 leader 中复制数据。
consumer-group:high-level consumer API 中,每个 consumer 都属于一个 consumer group,每条消息只能被
consumer group 中的一个 Consumer 消费,但可以被多个 consumer group 消费。
组间共享 ,组内竞争。
controller:kafka 集群中的其中一个服务器,用来进行 leader election 以及 各种 failover。
zookeeper:kafka 通过 zookeeper 来存储集群的 meta 信息。
replica:partition 的副本,保障 partition 的高可用。
先是启动kafka的一台broker做测试 创建新的topic one_broker_topic 副本replica 数目大于brokers的有效数据会报错的
./kafka-topics.sh --create --zookeeper mini10:2181 --replication-factor 2 --partitions 1 --topic one_broker_topic_error
报错:
./kafka-topics.sh --create --zookeeper mini10:2181 --replication-factor 1 --partitions 2 --topic one_broker_topicss 对应两个分区
在kafka存储数据的目录下面产生的文件夹:
所以说分区的数据对应在么一个broker上main都会有对应数目的文件夹 比如:
2个分区1个副本 在broker01上面就会有 topicss-0 topiss-1
3个分区,2个副本,2个broker 在broker01上面的
在broker02上面的信息:
接下来,解析一下topic和patiotin的关系,下面的两幅图来自kafka官网:官网。
图1
图2
Topic:每一条发送到kafka集群的数据都有一个topic主题,生产的每一条信息都是必须要指明到那个topic里面去,他可以看成是一个队里queue,
partition:数物理概念,每一个topic都有多个partition, 多个partition可以提高kafka的吞吐量。每一个partition物理删对应一个文件夹,在每一个文件夹下面包含一个.log文件和一个.index索引文件。
每条消息是追加到partition的末尾的,属于顺序写磁盘,所以效率会是非常的高的,这个特点保证了kafka是具有高吞吐率的性能的。
kafka和flume的区别是 ,kafka可以存储数据的,那么它存储的数据是永远存在的,但是考虑到磁盘的利用情况,kafka上面存储的数据是可以定期删除的。怎么配置呢?两种策略:一种是基于时间的,还有一种是基partition文件的大小的。分别是在$KAFKA_HOME/config/server.conf 下面配置:
log.retention.hours=168 基于一周时间
log.segment.bytes=1073741824 基于1GB大小