本文是《Kafka的Consumer Group Rebalance》一文的补充部分,主要附加介绍一下Kafka内置的几种分区分配策略。Kafka定义了一个消费者组内分区分配的接口ConsumerPartitionAssignor,该接口里面最核心的是assign方法:package org.apache.kafka.clients.consumer;
public interface C...
什么是Consumer Group Rebalance?Kafka Consumer创建的时候都要指定一个组ID(group id),所有组ID一样的Consumer就组成了一个Consumer Group。对于一个Partition同一时刻只会分配给同一个Group内某一个Consumer,这就是大家熟知的Kafka消费模型。通过这个模型,Kafka的消费者(也就是应用/服务)可以很方便的...
本文基于Kafka 2.8.有时我们会碰到网络是通畅的,但却连不上Kafka,特别是在多网卡环境或者云环境上很容易出现,这个其实和Kafka的监听配置有关系。本文介绍监听相关的配置,目前监听相关的参数主要有下面几个:listenersadvertised.listenerslistener.security.protocol.mapinter.broker.listener.namesecu...
上篇文章介绍了Kafka Consumer,这篇文章讨论Kafka Producer。Kafka Producer流程概述下面是一个简单的Producer实现:public class SimpleProducer {
public static void main(String[] args) {
Properties config = new Properties();
...
Kafka的消费者类KafkaConsumer是非线程安全的,那如何实现多线程的Consumer呢?先了解一下一般Consumer的流程。如上图:通过poll方法从kafka集群拉取数据;处理数据提交offset(如果开启了自动提交enable.auto.commit=true,则每次poll的时候会自动提交上一次poll的offset)如此往复。翻译成代码类似下面这样: Proper...
Kafka的存储层级概念上比较简单,一个topic分为若干partition,一个partition再分为若干segment。下图是一个示例:topic是个逻辑概念,partition和segment则是真实存储数据的:一个partition对应磁盘上面一个目录,一个segment对应partition目录下的一个日志文件,消息数据就是以append-only的方式顺序写入segment文件...
本文讨论Kafka的扩缩容以及故障后如何“补齐”分区,本文的操作基于Kafka 2.6版本。扩容扩容也就是新增节点,扩容后老的数据不会自动迁移,只有新创建的topic才可能会分配到新增的节点上面。如果我们不需要迁移旧数据,那直接把新的节点启动起来就行了,不需要做额外的操作。但有的时候,新增节点后,我们会将一些老数据迁移到新的节点上,以达到负载均衡的目的,这个时候就需要手动操作了。Kafka提...
本文讨论一下Kafka广义上的可靠性,所谓广义是从不同的角度、不同维度去观察系统的可靠性,比如从生产者(Producer)的角度看如何保证已经确认的数据一定写入了系统,不会丢失;从消费者(Consumer)的角度,只要数据没有彻底丢失,就可以读取。再比如从服务端(Broker)的角度,如何保证在可用性(Availability)和持久性(Durability)方面做权衡。副本机制分布式系统的...
- 1
- 2
- 后一页 »