Java使用Kafka记录

Java使用Kafka记录

1. Kafka的基本概念

Kafka是一个分布式的MQ。具备较高的吞吐量。

1.1 broker

Kafka集群包含一个或多个服务器,服务器节点成为broker。broker存储topic的数据。

1.2 Topic

写入Kafka集群的消息都有一个类别,这个类别被称为Topic。

1.3 Partition

Topic中的数据分割为一个或多个partition。每个partition中的数据使用多个切片文件存储。partition中的数据是有序的,不同partition间的数据顺序则不一致。
其中,一个Partition中,只有一个Topic;一个Topic,可以被分隔为不同的Partition。

1.4 Producer

生产者,主要是用来生产数据的,将消息发布到指定的topic。broker接收到消息之后,会将该消息追加到数据分片中。生产者可以指定存储的partition。

1.5 Consumer

消费者可以从broker读取数据,消费者可以消费多个topic中的数据。

1.6 Consumer Group

每个consumer属于一个特定的Grouper

1.7 Leader

每个partition有多个副本,其中只有一个作为Leader,是当前负责数据读写的partition

1.8 Follower

Follower跟随Leader,所有写请求都通过Leader路由。数据变更会广播给所有对的Follower,Follower与Leader保持数据同步。如果Leader失败,则从Follower中选举出一个新的Leader。

2. java 使用kafka

  1. 添加依赖
    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>2.5.1</version>
    </dependency>
  1. 创建生产者
@Bean(value = "kafkaProducer")
public KafkaProducer<String, String> getKafkaProducer() throws IOException {
    PathMatchingResourcePatternResolver pathMatchingResourcePatternResolver = new PathMatchingResourcePatternResolver();
    Resource resource = pathMatchingResourcePatternResolver.getResource("classpath:config/kafka/kafka_producer.properties");
    InputStream inStream = resource.getInputStream();
    Properties properties = new Properties();
    properties.load(inStream);
    return new KafkaProducer<String, String>(properties);
}

  1. 写入数据
try {
        // 写入kafka
        ProducerRecord<String, String> producerRecord = new ProducerRecord<>(topicName, JSON.toJSONString(po));
        kafkaProducer.send(producerRecord);
    }catch (Exception e){
        logger.error("write kafka error!",e);
    }

©️2020 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页