消息中间件

消息中间件卡夫卡

基础入门

其实主要是学习下markdown语法的使用。工作这么久。还不会这个。。。。。
Kafka 最早是由 LinkedIn 公司开发一种分布式的基于发布/订阅的消息系统,之后成为 Apache 的顶级项目。

特性

  1. 同时为发布和订阅提供高吞吐量 。Kafka 的设计目标是以时间复杂度为 O(1) 的方式提供消息持久化能力,即使对TB 级以上数据也能保证常数时间的访问性能。即使在非常廉价的商用机器上也能做到单机支持每秒 100K 条消息的传输。
  2. 消息持久化 将消息持久化到磁盘,因此可用于批量消费,例如 ETL 以及实时应用程序。通过将数据持久化到硬盘以及 replication 防止数据丢失。
  3. 分布式 功能 支持 Server 间的消息分区及分布式消费,同时保证每个 partition 内的消息顺序传输。这样易于向外扩展,所有的producer、broker 和 consumer 都会有多个,均为分布式的。无需停机即可扩展机器。
  4. 消费消息采用 pull 模式 消息被处理的状态是在 consumer 端维护,而不是由 server 端维护,broker 无状态,consumer 自己保存 offset。
  5. ** 支持 online 和 offline 的场景** 同时支持离线数据处理和实时数据处理。

卡夫卡结构图

在这里插入图片描述

整合springboot

@Configuration
@EnableKafka
public class KafkaReceiverConfig {

@Value("${spring.kafka.bootstrap-servers}")
private String bootstrapServers;


@Value("${spring.kafka.consumer.group-id}")
private String bootstrapGroupId;


@Bean
public Map<String, Object> consumerConfigs() {
    Map<String, Object> props = new HashMap<>();
    props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
    props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
    props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
    props.put(ConsumerConfig.GROUP_ID_CONFIG, bootstrapGroupId);
    return props;
}


@Bean
public ConsumerFactory<String, MerchantMessage> consumerFactory() {
    return new DefaultKafkaConsumerFactory<>(consumerConfigs());
}

@Bean
public ConcurrentKafkaListenerContainerFactory<String, MerchantMessage> kafkaListenerContainerFactory() {
    ConcurrentKafkaListenerContainerFactory<String, MerchantMessage> factory =
            new ConcurrentKafkaListenerContainerFactory<>();
    factory.setConsumerFactory(consumerFactory());

    return factory;
}


@Bean
public KafkaConsumer consumer() {
    return new KafkaConsumer();
}

}

@Configuration
public class KafkaProducerConfig {

@Value("${spring.kafka.registry-servers}")
private String registryServers;

@Value("${spring.kafka.producer.group-id}")
private String groupId;

@Value("${spring.kafka.bootstrap-servers}")
private String bootstrapServers;

@Bean
public Map<String, Object> producerConfigs() {
    Map<String, Object> props = new HashMap<>();
    props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
    props.put(ProducerConfig.CLIENT_ID_CONFIG, groupId);
    props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,
            KafkaAvroSerializer.class.getName());
    // Configure the KafkaAvroSerializer.
    props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
            KafkaAvroSerializer.class.getName());
    // Schema Registry location.
    props.put(KafkaAvroSerializerConfig.SCHEMA_REGISTRY_URL_CONFIG,
            registryServers);
    return props;
}

@Bean
public ProducerFactory<String, String> producerFactory() {
    return new DefaultKafkaProducerFactory<>(producerConfigs());
}

@Bean
public KafkaTemplate<String, Object> kafkaTemplate() {
    return new KafkaTemplate(producerFactory());
}

@Bean
public KafkaProducer kafkaProducer(){
    return new KafkaProducer(producerConfigs());
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值