kafka介绍
Apache Kafka® 是 一个分布式流处理平台
kafka官方中文文档https://kafka.apachecn.org/
分布式:日志的分区partition (分布)在Kafka集群的服务器上。每个服务器在处理数据和请求时,共享这些分区。每一个分区都会在已配置的服务器上进行备份,确保容错性.
- Kafka作为一个集群,运行在一台或者多台服务器上.
- Kafka 通过 topic 对存储的流数据进行分类
- 每条记录中包含一个key,一个value和一个timestamp(时间戳)
- Kafka的性能和数据大小无关
- kafka依赖于zookeeper
在Kafka中,客户端和服务器使用一个简单、高性能、支持多语言的 TCP 协议.此协议版本化并且向下兼容老版本, 我们为Kafka提供了Java客户端,也支持许多其他语言的客户端。
kafka功能
-
队列:消费者池从server读取数据,每条记录处理过程分发被池子中的一个消费者消费;
-
发布-订阅:Kafka允许你将消息广播给多个消费组。
Kafka能够为一个消费者池提供顺序保证和负载平衡,是通过将topic中的partition分配给消费者组中的消费者来实现的 -
kafka可以作为存储系统
数据写入Kafka后被写到磁盘,并且进行备份以便容错。直到完全备份,可以存储大量数据,并且可通过客户端控制它读取数据的位置 -
Kafka用做流处理
不仅仅用来读写和存储流式数据,它最终的目的是为了能够进行实时的流处理。
流处理器不断地从输入的topic获取流数据,处理数据后,再不断生产流数据到输出的topic中去。 -
批处理
-
Producers 生产者
生产消息的平台;生产者可以将数据发布到所选择的topic(主题)中,可以使用循环的方式来简单地实现负载均衡 -
Consumers 消费者
消费消息的平台;Kafka中实现消费的方式是将日志中的分区划分到每一个消费者实例上 -
topic(提供一串流式的记录)
Topic 就是数据主题,是数据记录发布的地方,可以用来区分业务系统。Kafka中的Topics总是多订阅者模式,一个topic可以拥有一个或者多个消费者来订阅它的数据。
'运行list(列表)列出所有的topic'
bin/kafka-topics.sh --zookeeper node1:2181 --list
'创建topic'
bin/kafka-topics.sh --create --zookeeper node1:2181 --replication-factor 1 --partitions 1 --topic 新建topic名称
或者,您也可将代理配置为:在发布的topic不存在时,自动创建topic,而不是手动创建。
- offset(偏移量)
每个分区都是有序且顺序不可变的记录集,并且不断地追加到结构化的commit log文件。分区中的每一个记录都会分配一个id号来表示顺序,我们称之为offset
offset用来唯一的标识分区中每一条记录。
offset(偏移量)即消费在log中的位置.偏移量由消费者所控制,一个消费者可以重置到一个旧的偏移量,从而重新处理过去的数据;也可以跳过最近的记录,从"现在"开始消费。
'重置该消费组offset'
bin/kafka-consumer-groups.sh --bootstrap-server node1:9092,node2:9092,node3:9092 --group 消费组 --reset-offsets --execute --to-offset 1001(偏移量) --topic topic名称
partition(分区)
对于每一个topic, Kafka集群都会维持一个分区日志,一个主题可能有多个分区
> 运行"describe topics"命令来查看topic的详细信息
> bin/kafka-topics.sh --describe --zookeeper node1:2181 --topic topic名称
Topic:my-replicated-topic PartitionCount:1 ReplicationFactor:3 Configs:
Topic: my-replicated-topic Partition: 0 Leader: 1 Replicas: 1,2,0 Isr: 1,2,0
- “leader”是负责给定分区所有读写操作的节点。每个节点都是随机选择的部分分区的领导者。
- “replicas”是复制分区日志的节点列表,不管这些节点是leader还是仅仅活着。
- “isr”是一组“同步”replicas,是replicas列表的子集,它活着并被指到leader。