kafka初认识(一) (2)

消费者使用一个消费组名称来进行标识,发布到 topic 中的每条记录被分配给订阅消费组中的一个消费者实例。消费者实例可以分布在多个进程中或者多个机器上。

如果所有的消费者实例在同一消费组中,消息记录会负载平衡到每一个消费者实例。

如果所有的消费者实例在不同的消费组中,每条消息记录会广播到所有的消费者进程。

kafka初认识(一)

如图,这个 Kafka 集群有两台 server 的,四个分区(p0-p3)和两个消费者组。消费组A有两个消费者,消费组B有四个消费者。通常情况下,每个 topic 都会有一些消费组,一个消费组对应一个"逻辑订阅者

"。一个消费组由许多消费者实例组成,便于扩展和容错。这就是发布和订阅的概念,只不过订阅者是一组消费者而不是单个的进程。Kafka中实现消费的方式是将日志中的分区划分到每一个消费者实例上,以便在任何时间,每个实例都是分区唯一的消费者。维护消费组中的消费关系由Kafka协议动态处理。如果新的实例加入组,他们将从组中其他成员处接管一些 partition 分区;如果一个实例消失,拥有的分区将被分发到剩余的实例。Kafka 只保证分区内的记录是有序的,而不保证主题中不同分区的顺序。每个 partition 分区按照key值排序足以满足大多数应用程序的需求。但如果你需要总记录在所有记录的上面,可使用仅有一个分区的主题来实现,这意味着每个消费者组只有一个消费者进程。

Replication

每个partition还会被复制到其它服务器作为replication,这是一种冗余备份策略

kafka初认识(一)

同一个partition的多个replication不允许在同一broker上

partition的replication中,有一个leader ,零或多个follower

leader处理此分区的所有的读写请求, follower仅仅被动的复制数据

leader宕机后,会从follower中选举出新的leader

四个核心 API

Producer API:允许一个应用程序发布一串流式的数据到一个或者多个 Kafka topic。

Consumer API:允许一个应用程序订阅一个或多个 topic ,并且对发布给他们的流式数据进行处理。

Streams API:允许一个应用程序作为一个流处理器,消费一个或者多个 topic 产生的输入流,然后生产一个输出流到一个或多个 topic 中去,在输入输出流中进行有效的转换。

Connector API:允许构建并运行可重用的生产者或者消费者,将Kafka topics连接到已存在的应用程序或者数据系统。比如,连接到一个关系型数据库,捕捉表(table)的所有变更内容。

kafka初认识(一)

Kafka中,客户端和服务器之间的通信是通过简单,高性能,语言无关的TCP协议完成的。此协议已版本化并保持与旧版本的向后兼容性。Kafka提供多种语言客户端。

kafka API - producer 

kafka初认识(一)

Properties props = new Properties(); props.put("batch.size",16384); //默认值为16384 props.put("linger.ms",16384); //默认值为0 props.put("acks", "all"); props.put("retries",1); //... Producer<String, String> producer = new KafkaProducer(props); ProducerRecord<String, String> record =new ProducerRecord<String, String>("my-topic", "key", "value"); producer.send(record); producer.close();

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzjxsw.html