维基百科java
Kafka 是由Apache软件基金会开发的一个开源流处理平台,由Scala和JAVA编写.该项目的目标是为处理实时数据提供一个统1、高吞吐、低延迟的平台。其持久化层本质是一个"按照分布式事务日志架构的大规模发布/订阅消息队列".Kafka能够经过Kafka Connect链接到外部系统(用于数据输入/输出),并提供了Kafka Streams ———— 一个Java流式处理库.
Kafka 架构说明linux
一个典型的Kafka集群包含若干Producer,若干Broker,若干Consumer,以及一个Zookeeper集群。Kafka经过Zookeeper管理集群配置,选举Leader,以及在Consumer Group发送变化时进行Rebalance(负载均衡)。Producer 使用push(推)模式将消息发布到Broker;Consumer 使用pull(拉)模式从Broker订阅并消费消息。Kafka 四大核心算法
Kafka 基础概念
生产者的配置
参数 | 描述 |
---|---|
acks | acks 参数指定了必需要有多少个分区副本收到消息,生产者才会认为消费写入是成功的。acks = 0 生产者在成功写入消息以前不会等待任何来自服务器的响应。(缺点:没法确认消费是否成功;优势:高吞吐量);acks = 1 只要集群的首领节点收到消息,生产者就会收到一个来自服务器的成功响应。若是消费没法到达首领节点(好比首领节点奔溃,新的首领尚未被选举处理),生产者会收到一个错误响应,为了不数据丢失,生产者会重发消息。不过,若是一个没有收到消息的节点成为新首领,消息仍是会丢失。acks = all 只有当全部参与复制的节点所有收到消息时,生产者才会收到一个来自服务器的成功响应。 |
buffer.memory | 该参数用来设置生产者缓冲区的大小,生产者用它缓冲要发送到服务器的消息。0.9.0.0 版本被替换成了 max.block.ms,表示在抛出异常以前能够阻塞一段时间 |
compression.type | 默认状况下为none,消费发送时不会被压缩。该参数能够设置为snappy、gzip或lz4,它指定了消息被发送给broker以前使用哪种压缩算法进行压缩。1. snappy 压缩算法有Google发明,它占用较少的CPU,却能提供较好的性能和至关可观的压缩比(比较关注性能和网路带宽) 2. gzip 压缩算法通常会占用较多的CPU,但会提供更高的压缩比(网络带宽有限次采用) |
retries | 生产者从服务器收到的错误有多是临时性的错误(好比分区找不到首领)。在这中状况下,retries参数是值决定了生产者能够重发消息的次数,若是达到这个次数,生产者会放弃重试并返回错误。默认状况下,生产者会在每次重试之间等待100ms,能够经过retry.backoff.ms参数来改变这个时间间隔. |
batch.size | 当有多个消息须要被发送到同一个分区时,生产者会把它们放在同一个批次里。该采纳数指定了一个批次可使用的内存大小,按照字节数计算(而不是消息个数)。1. 批次设置很大 不会形成延迟,只会占用更多的内存 2. 批次设置很小 由于生产者须要更频繁地发送消息,会增长一些额外的开销 |
linger.ms | 该参数指定了生产者在发送批次以前等待更多消息加入批次的时间。 |
client.id | 该参数能够是任意的字符串,服务器会用它来识别消息的来源,还能够用在日志和配额指标里 |
request.timeout.ms | 指定了生产者在发送数据时等待服务器返回响应的时间 |
max.block.ms | 该参数指定了在调用send()方法或使用partitionsFor()方法获取元数据时生产者的阻塞时间。当生产者的发送缓冲区已满,或者没有可用的元数据时,这些方法就会阻塞。在阻塞时间达到max.block.ms时,生产者会抛出超时异常 |
max.request.size | 该参数用于控制生产者发送的请求大小。它能够指能发送的单个消息的最大值,能够指单个请求里全部消息总的大小。 |
数据apache
副本
复制
replicas(ISR);bootstrap
集群成员关系
处理请求
参数 | 描述 |
---|---|
Request type | API key |
Request version | broker能够处理不一样版本的客户端请求,并根据客户端版本作出不一样的响应 |
Correlation ID | 一个具备惟一性的数字,用于标识请求消息,同时也会出如今响应消息和错误日志里(用于诊断问题) |
Client ID | 用于标识发送请求的客户端 |
控制器
Kafka 消费过程分析
keyvalue数组
疑问
建立主题时,副本因子应该小于等于可用的broker数缓存
Error while executing topic command : replication factor: 3 larger than available brokers: 1 [2019-07-23 17:34:45,963] ERROR org.apache.kafka.common.errors.InvalidReplicationFactorException: replication factor: 3 larger than available brokers: 1 (kafka.admin.TopicCommand$)