kafka架构

前言

  • 一个典型的kafka体系结构包括若干个producer,若干个broker,若干个consumer,以及一个zookeeper集群。其中zookeeper集群是kafka用来负责集群元数据的管理、控制器的选举等操作的。producer将消息发送到broker,broker负责将收到的消息存储到磁盘中,而consumer负责从broker订阅并消费消息。

broker

架构

  • 每个topic有好多partition(存储内容不同),均匀分布在每个broker上
  • 每个partition都有好多replica(存储内容相同),其中一个为leader,其余的为follower
  • broker接收的消息必须以字节数组的形式存在,故需要序列化与反序列化
  • kafka消息只保证partition内有序,而不是topic内有序

参数

  • listeners:支持PLAINTEXT,SSL,SASL_SSL。示例配置:listeners=PLAINTEXT://localhost:9092
  • log.dir:用来配置单个根目录
  • log.dirs:用来配置多个根目录(以逗号分割)
  • message.max.bytes:用来指定broker所能接收消息的最大值
  • auto.create.topics.enable:描述操作不存在的topic使是否自动创建
  • delete.topic.enable:执行删除操作时是否真正删除topic

命令

  • 启动broker:bin/kafka-server-start.sh -daemon config/server.properties
  • 创建某topic:bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test
  • 查看topic列表:bin/kafka-topics.sh --list --bootstrap-server localhost:9092
  • 启动命令行producer:bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
  • 启动命令行consumer:bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning
  • 删除某topic:bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic test
  • 查看某topic某partition的offset的最大值:bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --partitions 0 --time -1 --topic test
  • 查看某topic某partition的offset的最小值:bin/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list localhost:9092 --partitions 0 --time 1 --topic test

producer

架构

kafka_producer架构

  • 消息在发送到kafka集群之前,可以经过拦截器,序列化器,分区器,均可根据具体情况自定义。
  • RecordAccumulator主要用来缓存消息以便Sender线程可以批量发送,进而减少网络传输的资源消耗以提升性能。
  • RecordAccumulator缓存的大小可以通过生产者参数buffer.memory配置。如果生产者发送消息的速度超过发送到服务器的速度,则会导致生产者空间不足,这个取决于生产者参数max.block.ms。

参数

  • acks:这个参数用来指定分区中必须要有多少个副本收到这条消息,之后生产者才会认为这条消息是成功写入的。值为1,分区的leader副本成功写入消息即可;值为0,生产者发送消息之后不需要等待任何服务端的响应;值为-1或者all,需等待ISR中所有副本都成功写入消息才能够收到来自服务端的成功响应。注意:值为字符串类型。
  • max.request.size:这个参数用来限制生产者发送的消息的最大值
  • retries:生产者重试的次数,默认为0,即在发生异常的时候不进行任何重试动作。
  • retry.backoff.ms:两次重试之间的时间间隔
  • compression.type:用来指定消息的压缩方式,默认值为"none",还可配置为"gzip",“snappy”,“lz4”。消息压缩是一种使用时间换空间的优化方式,如果对时延有一定要求,则不推荐对消息进行压缩。

consumer

架构

  • 消费者组可以有好多消费者,这些消费者均匀消费某topic所有partition,互不影响。一个消费者组里的两个消费者不会消费同一个partition。
  • 若某消费者组只有一个消费者,则该消费者消费该topic所有partition。
  • 在kafka0.9.0.0之前,消费者会使用zookeeper来保存一些信息。但在该版本和该版本之后,kafka引入了一个新的消费者接口,允许broker直接维护这些信息。
  • 若一个consumer消费多个partition,会把一个partition全部消费完再消费下一个partition。
  • 每一个partition只能被一个consumer group的一个consumer所消费。
  • 一个consumer group的consumer默认不会重复消费已经消费的消息

参数

  • group.id:消费者隶属的消费者组的名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值