kafka-0.10.1.X版本之前: auto.offset.reset 的值为smallest,和,largest.(offest保存在zk中)
kafka-0.10.1.X版本之后: auto.offset.reset 的值更改为:earliest,latest,和none (offest保存在kafka的一个特殊的topic名为:__consumer_offsets里面)
如果存在已经提交的offest时,不管设置为earliest 或者latest 都会从已经提交的offest处开始消费
如果不存在已经提交的offest时,earliest 表示从头开始消费,latest 表示从最新的数据消费,也就是新产生的数据.
none topic各分区都存在已提交的offset时,从提交的offest处开始消费;只要有一个分区不存在已提交的offset,则抛出异常
简介
kafka对消息保存时根据Topic进行归类,发送消息者成为producer,消息接受者成为consumer,此外kafka集群有多个kafka实例组成,每个实例()成为broker,无论是kafka集群,还是producer和consumer都依赖于zookeeper来保证系统可用性集群保存一些metaaaarticlea/png;base64,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" alt="" width="444" />
Topic(主题、专题) & Partition(分区)
消息发送时都被发送到一个topic,其本质就是一个目录,而topic是由一些partition Logs(分区日志)组成,其组织结构如下图所示
每个partition的消息都是有序,生产的消息被不断追加到Partition log上,其中的每个消息都被赋予了一个唯一的offset值(偏移值;如果设置offset值为9,那么消费者会从offset值是9的位置开始读取数据)
kafka集群会保存所有的消息,不管消费没有消费都会一直存在;除非消息超过了设定的消息过期时间,才会被自动清除以释放磁盘空间。
Kafka核心组件 Replications(复制)、Partitions(分区) 和Leaders(领袖)
- kafka中的数据是持久化并容错的,允许每个topic设置副本数量(Replications)副本数量决定了有几个broker(节点(机器))来存放写入的数据,(如果你的副本数量设置3.那么一份数据就会被存放在3台不同的机器上)一般推荐副本数量至少为2
- kafka中的topic是以partition形式存放的,每一个topic都可以设置它的partition数量,partition的数量决定了组成topic的log的数量,producer在生产数据时,会按照一定规则(这个规则也可以是自定义的)把消息发布到topic的各个partition中,上面的副本都是以partition为单位,不过只有一个partition的副本会被选举成leader作为读写用(随机选举)
- 关于如何设置partition值需要考虑的因素,一个partition只能被一个消费者消费(一个消费者可以同时消费多个partition)因此,如果设置的partition的数量小于consumer的数量,就会有消费者消费不到数据,所以推荐partition的数量一定要大于同时运行的consumer数量。建议partition的数量大于集群broker的数量,这样leader partition可均匀分布在各个broker,使负载均衡
kafka核心特性
- 压缩;kafka支持以集合为单位发送消息,在此基础上,kafka还支持对消息集合进行压缩,Producer端可以通过GZIP或Snappy格式对消息集合进行压缩。好处就是减少传输的数据量,减轻对网络传输的压力
- 消息可靠性;
- 从Producer端:当发送一个消息后,Producer端会等待broker成功接收到消息的反馈之后,才进行传输下一个消息。如果消息在途中丢失或是其中一个broker挂掉,Producer会重新发送;
- 从Consumer端:broker端记录了partition中的一个offset值,这个值指向Consumer下一个即将消费message。当Consumer收到了消息,但却在处理过程中挂掉,此时Consumer可以通过这个offset值重新找到上一个消息再进行处理。Consumer还有权限控制这个offset值,对持久化到broker端的消息做任意处理
- 备份机制:提高了kafka集群的可靠性,稳定性。kafka运行集群中的节点挂掉后而不影响整个集群工作,一个备份数量为n的集群运行n-1个节点失败,在所有节点中,有一个节点作为lead节点,这个节点保存了其他备份节点列表,并维持各个备份间的状态同步
aaarticlea/png;base64,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" alt="" width="422" />
消息队列(Message Queue)
消息:网络中的两台计算机或者两个通讯设备之间传递的数据。例如说:文本、音乐、视频等内容。
队列:一种特殊的线性表(数据元素首尾相接),特殊之处在于只允许在首部删除元素和在尾部追加元素。入队、出队。
消息队列:顾名思义,消息+队列,保存消息的队列。消息的传输过程中的容器;主要提供生产、消费接口供外部调用做数据的存储和获取。
MQ分类:点对点(P2P)、发布订阅(Pub/Sub)
共同点: 消息生产者生产消息发送到queue中,然后消息消费者从queue中读取并且消费消息。
不同点: P2P模型包含:消息队列(Queue)、发送者(Sender)、接收者(Receiver) 一个生产者生产的消息只有一个消费者(Consumer)(即一旦被消费,消息就不在消息队列中)。打电话。 Pub/Sub包含:消息队列(Queue)、主题(Topic)、发布者(Publisher)、订阅者(Subscriber) 每个消息可以有多个消费者,彼此互不影响。比如我发布一个微博:关注我的人都能够看到。
kafka优点
高吞吐量:可以满足每秒百万级别消息的生产和消费
持久性:有一套完善的消息存储机制,确保数据的高效安全的持久化
分布式:基于分布式的扩展,和容错机制,kafka的数据都会赋值到几台服务器上,当某一台故障失效时,生产者和消费者转而使用其它的机器
作用:用于处理活跃的数据(登录、浏览、点击、分享、喜欢等用户行为产生的数据)
kafka服务:
Topic:主题,kafka处理的消息的不同分类
Broker:消息的代理,Kafka集群中的一个kafka服务节点称为一个broker,主要存储消息数据,存在硬盘中每个topic都是有分区的
Partition:topic物理上的分组(分区)
Message:消息(数据)。通信的基本单位,每个消息都属于一个partition
多个Message组合成Partition组合成Topic组合成Broker
kafka服务相关:
zookeeper:协调kafka的正常运行(在启动kafka必须先启动zookeeper,并且每台机器都必须启动)
zkServer.sh start
zkServer.sh stop
Producer:消息和数据的生产者,向kafka的一个topic发布消息
Consumer:消息和数据的消费者,订阅topic并处理其发布的消息
启动kafka:
kafka-server-start.sh /usr/local/hadoop/kafka_2.11-0.8.2.2/config/server.properties
后台启动kafka:
kafka-server-start.sh /usr/local/hadoop/kafka_2.11-0.8.2.2/config/server.properties 1>/dev/null 2>&1 & (后台启动)
守护进程kafka:
kafka-server-start.sh -daemon /usr/local/hadoop/kafka_2.11-0.8.2.2/config/server.properties
停止:
kafka-server-stop.sh
增:
新增一个topic:“hello”,为它分配一个分区(3个区),保存二个副本
kafka-topics.sh --create --zookeeper 192.168.20.10:2181 --replication-factor 2 --partitions 3 --topic topic名字
#######replication-factor不能大于broker数
查:
查询hello的信息【不加topic是查询所有的topic的详情】
kafka-topics.sh --describe --zookeeper 192.168.20.10:2181 --topic topic名字
所有可以使用的topic
kafka-topics.sh --list --zookeeper 192.168.20.10:2181
改:
修改hello为2个分区 alter:修改partition数(只能增加)
kafka-topics.sh --alter --zookeeper 192.168.20.10:2181 --partitions 4 --topic topic名字
删:
删除world的topic kafka-topics.sh --delete --zookeeper 192.168.20.10:2181 --topic topic名字
#是否开启topic的删除功能:默认为false。 如果要开启删除topic 开关
在kafka/conf/server.properties 里的最后一行添加: delete.topic.enable=true
创建生产者 producer
必须的参数:
broker-list:kafka的服务地址[多个用逗号隔开]、
topic:具体的单个topic
kafka-console-producer.sh --broker-list 192.168.20.10:9092 --topic topic名字
创建消费者 consumer
必须的参数: Zookeeper:
kafka的zk集群地址; Topic\whitelist\blacklist:
1、具体的单个topic
2、多个白名单topic字符串[逗号隔开]。
3、多个黑名单topic字符串[逗号隔开]。
kafka-console-consumer.sh --zookeeper 192.168.20.11:2181 --topic topic名字 --from-beginning
标记删除的topic也可以使用。
--topic t1,t2表示只消费t1,t2主题
kafka-console-consumer.sh --whitelist t1,t2 –zookeeper 192.168.20.10:2181,192.168.20.11:2181 --from-beginning --topic
t1,t2表示除过t1,t2主题之外消费所有主题
kafka-console-consumer.sh --blacklist t1,t2 --zookeepershb01:2181,192.168.79.139:2181 --from-beginning
broker:配置文件server.properties
1.为了减少磁盘写入的次数,broker会将消息暂时buffer(加载到缓存)起来,当消息的个数达到一定阀值或者过了一定的时间间隔时,再flush到磁盘,这样减少了磁盘IO调用的次数。
配置:Log Flush Policy
#log.flush.interval.messages=10000 (字节) 一个分区的消息数阀值
#log.flush.interval.ms=1000 (毫秒)
2、kafka的消息保存一定时间(通常为7天)后会被删除。配置:Log Retention Policy
log.retention.hours=168 (小时)
#log.retention.bytes=1073741824(字节) log.retention.check.interval.ms=300000(毫秒)
Producer:配置文件:producer.properties
1、异步或者同步发送
配置项:producer.type
异步或者同步发送
同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据的通讯方式。
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据的通讯方式。
2、批量发送可以很有效的提高发送效率。 Kafka producer的异步发送模式允许进行批量发送,先将消息缓存在内存中,然后一次请求批量发送出去。
具体配置queue.buffering.max.ms、queue.buffering.max.messages。
默认值分别为5000和10000
为什么设置group
同样是逻辑上的概念,是Kafka实现单播和广播两种消息模型的手段。同一个topic的数据,会广播给不同的group;同一个group中的worker,只有一个worker能拿到这个数据。换句话说,对于同一个topic,每个group都可以拿到同样的所有数据,但是数据进入group后只能被其中的一个worker消费。group内的worker可以使用多线程或多进程来实现,也可以将进程分散在多台机器上,worker的数量通常不超过partition的数量,且二者最好保持整数倍关系,因为Kafka在设计时假定了一个partition只能被一个worker消费(同一group内)。