使用Linux部署Kafka教程_linux搭建kafka,20道高频面试题(含答案)

org.springframework.kafka spring-kafka

2、修改配置

spring:
kafka:
bootstrap-servers: 192.168.58.130:9092 #部署linux的kafka的ip地址和端口号
producer:

发生错误后,消息重发的次数。

retries: 1
#当有多个消息需要被发送到同一个分区时,生产者会把它们放在同一个批次里。该参数指定了一个批次可以使用的内存大小,按照字节数计算。
batch-size: 16384

设置生产者内存缓冲区的大小。

buffer-memory: 33554432

键的序列化方式

key-serializer: org.apache.kafka.common.serialization.StringSerializer

值的序列化方式

value-serializer: org.apache.kafka.common.serialization.StringSerializer

acks=0 : 生产者在成功写入消息之前不会等待任何来自服务器的响应。

acks=1 : 只要集群的首领节点收到消息,生产者就会收到一个来自服务器成功响应。

acks=all :只有当所有参与复制的节点全部收到消息时,生产者才会收到一个来自服务器的成功响应。

acks: 1
consumer:

自动提交的时间间隔 在spring boot 2.X 版本中这里采用的是值的类型为Duration 需要符合特定的格式,如1S,1M,2H,5D

auto-commit-interval: 1S

该属性指定了消费者在读取一个没有偏移量的分区或者偏移量无效的情况下该作何处理:

latest(默认值)在偏移量无效的情况下,消费者将从最新的记录开始读取数据(在消费者启动之后生成的记录)

earliest :在偏移量无效的情况下,消费者将从起始位置读取分区的记录

auto-offset-reset: earliest

是否自动提交偏移量,默认值是true,为了避免出现重复数据和数据丢失,可以把它设置为false,然后手动提交偏移量

enable-auto-commit: false

键的反序列化方式

key-deserializer: org.apache.kafka.common.serialization.StringDeserializer

值的反序列化方式

value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
listener:

在侦听器容器中运行的线程数。

concurrency: 5
#listner负责ack,每调用一次,就立即commit
ack-mode: manual_immediate
missing-topics-fatal: false

本次测试:linux地址:192.168.58.130

**spring.kafka.bootstrap-servers=**192.168.58.130:9092

**advertised.listeners=**192.168.58.130:9092

3、生产者

import com.alibaba.fastjson.JSON;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.kafka.support.SendResult;
import org.springframework.stereotype.Component;
import org.springframework.util.concurrent.ListenableFuture;
import org.springframework.util.concurrent.ListenableFutureCallback;

/**

  • 事件的生产者
    */
    @Slf4j
    @Component
    public class KafkaProducer {

@Autowired
public KafkaTemplate kafkaTemplate;

/** 主题 /
public static final String TOPIC_TEST = “Test”;
/
* 消费者组 */
public static final String TOPIC_GROUP = “test-consumer-group”;

public void send(Object obj){
String obj2String = JSON.toJSONString(obj);
log.info(“准备发送消息为:{}”,obj2String);

//发送消息
ListenableFuture<SendResult<String, Object>> future = kafkaTemplate.send(TOPIC_TEST, obj);
//回调
future.addCallback(new ListenableFutureCallback<SendResult<String, Object>>() {
@Override
public void onFailure(Throwable ex) {
//发送失败的处理
log.info(TOPIC_TEST + " - 生产者 发送消息失败:" + ex.getMessage());
}

@Override
public void onSuccess(SendResult<String, Object> result) {
//成功的处理
log.info(TOPIC_TEST + " - 生产者 发送消息成功:" + result.toString());
}
});
}

}

4、消费者

import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.kafka.support.Acknowledgment;
import org.springframework.kafka.support.KafkaHeaders;
import org.springframework.messaging.handler.annotation.Header;
import org.springframework.stereotype.Component;

import java.util.Optional;

/**

  • 事件消费者
    */
    @Component
    public class KafkaConsumer {
    private Logger logger = LoggerFactory.getLogger(org.apache.kafka.clients.consumer.KafkaConsumer.class);

@KafkaListener(topics = KafkaProducer.TOPIC_TEST,groupId = KafkaProducer.TOPIC_GROUP)
public void topicTest(ConsumerRecord<?,?> record, Acknowledgment ack, @Header(KafkaHeaders.RECEIVED_TOPIC) String topic){
Optional<?> message = Optional.ofNullable(record.value());
if (message.isPresent()) {
Object msg = message.get();
logger.info(“topic_test 消费了: Topic:” + topic + “,Message:” + msg);
ack.acknowledge();
}
}
}

5、测试发送消息

@Test
void kafkaTest(){
kafkaProducer.send(“Hello Kafka”);
}

6、测试收到消息

六、拦截器

1、生产者拦截器

1.1、生产者拦截器代码

import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.producer.ProducerInterceptor;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.RecordMetadata;

import java.util.Map;

/**

  • @author idcos
  • @date 2023/11/9 11:13
    */
    @Slf4j
    public class CustomProducerInterceptor implements ProducerInterceptor<String,String> {
    @Override
    public ProducerRecord onSend(ProducerRecord producerRecord) {
    log.info(“发送前处理———发送消息:”+producerRecord.toString());
    return producerRecord;
    }

@Override
public void onAcknowledgement(RecordMetadata recordMetadata, Exception e) {
// 在收到消息的确认或异常时执行逻辑
if (e == null) {
log.info(“消息成功发送”);
} else {
log.error(“消息成功失败”);
}
}

@Override
public void close() {
log.info(“执行一些资源清理操作”);
}

@Override
public void configure(Map<String, ?> map) {

}
}

1.2、生产者yml配置

spring:
kafka:
bootstrap-servers: IP:9092,IP:9092,IP:9092
producer:
properties:
interceptor.classes: com.kafkaserver3.interceptor.CustomProducerInterceptor

1.3、测试

发送消息hello,主题TOPIC1,key为test

2、消费者拦截器

2.1、消费者拦截器代码

import lombok.extern.slf4j.Slf4j;
import org.apache.kafka.clients.consumer.ConsumerInterceptor;
import org.apache.kafka.clients.consumer.ConsumerRecords;
import org.apache.kafka.clients.consumer.OffsetAndMetadata;
import org.apache.kafka.common.TopicPartition;

import java.util.Map;

/**

  • @author idcos
  • @date 2023/11/9 11:25
    */
    @Slf4j
    public class CustomConsumerInterceptor implements ConsumerInterceptor<String,String> {
    @Override
    public ConsumerRecords<String, String> onConsume(ConsumerRecords<String, String> consumerRecords) {
    log.info(“消费前处理———发送消息:”+consumerRecords.toString());
    return consumerRecords;
    }

@Override
public void onCommit(Map<TopicPartition, OffsetAndMetadata> map) {
// 在消费者提交偏移量之后的逻辑
log.info(“在消费者提交偏移量之后的逻辑”+map.toString());
}

@Override
public void close() {
// 在拦截器关闭时的逻辑
System.out.println(“在拦截器关闭时”);
}

@Override
public void configure(Map<String, ?> map) {

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
img

f177u8-1712553160087)]
[外链图片转存中…(img-bd2OpAD0-1712553160088)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
[外链图片转存中…(img-bcLN0H3e-1712553160088)]

  • 23
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Linux部署Kafka的步骤如下: 1. 下载Kafka的二进制文件,解压到指定目录。 2. 配置Kafka的环境变量,包括JAVA_HOME、KAFKA_HOME等。 3. 配置Kafka的配置文件,包括zookeeper的地址、broker的ID、端口等。 4. 启动zookeeper服务。 5. 启动Kafka服务。 6. 创建topic。 7. 发送和接收消息。 以上是Linux部署Kafka的基本步骤,具体操作可以参考Kafka官方文档或者相关教程。 ### 回答2: Kafka是一个高性能、分布式的消息系统。它被广泛应用于大规模的数据处理和分析领域,是处理实时数据的重要工具之一。在Linux操作系统中部署Kafka相对比较简单,以下是详细步骤: 1. 安装Java环境:Kafka是用Java开发的,因此需要先安装Java环境。可以在终端输入“java -version”命令来检查是否已经安装了Java环境。 2. 下载Kafka:在https://kafka.apache.org/downloads页面上下载最新的Kafka二进制文件。解压缩后可以看到bin、config和libs等文件夹。 3. 配置Kafka:修改“config/server.properties”文件。主要包括配置broker.id、listeners、log.dirs、zookeeper.connect等参数。broker.id是Kafka集群中的唯一标识,listeners是Kafka监听的网络地址,log.dirs是Kafka存储日志文件的目录,zookeeper.connect指向ZooKeeper的连接地址。 4. 启动ZooKeeper:Kafka依赖于ZooKeeper来管理集群的状态信息。在“config/zookeeper.properties”文件中配置ZooKeeper的端口号,然后通过终端命令“./bin/zookeeper-server-start.sh config/zookeeper.properties”启动ZooKeeper。 5. 启动Kafka:在终端命令输入“./bin/kafka-server-start.sh config/server.properties”启动Kafka。启动成功后,可以在控制台查看Kafka的日志信息。 6. 创建主题:在Kafka中,消息都是通过主题进行存储和订阅。可以通过终端命令“./bin/kafka-topics.sh --create --topic <topic-name> --zookeeper localhost:2181 --partitions <num-partitions> --replication-factor <replication-factor>”来创建主题。其中,topic-name是主题的名称,num-partitions是分区的数量,replication-factor是副本的数量。 7. 发送消息:可以通过终端命令“./bin/kafka-console-producer.sh --topic <topic-name> --broker-list localhost:9092”来向指定主题发送消息。 8. 订阅消息:可以通过终端命令“./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic <topic-name>”来订阅指定主题的消息。 ### 回答3: Kafka是一款高性能,高可靠的分布式消息队列系统。在Linux系统上部署Kafka相对较为简单,以下是部署步骤: 1.首先,下载Kafka的安装文件。可以在官网上下载,也可以使用apt-get命令进行安装。 2.解压安装文件,并将Kafka文件夹移动到合适的位置。 3.配置Kafka环境变量,将Kafka的bin目录添加到PATH变量中。 4.将Kafka的配置文件拷贝到对应的位置,并进行修改。主要需要修改的是Kafka的server.properties文件,将Kafka的各项配置根据自己的需求进行修改。 5.启动Kafka服务,可以使用命令bin/kafka-server-start.sh config/server.properties启动服务。如果一切正常,Kafka会开始运行,可以用jps命令查看Kafka的相关进程信息。 6.在Kafka运行正常的情况下,可以创建Kafka的topic。使用命令bin/kafka-topics.sh --create --topic mytopic --zookeeper localhost:2181 --replication-factor 1 --partitions 1创建一个名字为mytopic的topic。其中,--zookeeper后面的参数指定zookeeper的地址,--replication-factor指定备份数量,--partitions指定分区数量。 7.在topic创建之后,可以使用Kafka的生产者和消费者进行测试。使用命令bin/kafka-console-producer.sh --broker-list localhost:9092 --topic mytopic创建一个生产者。使用命令bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic mytopic --from-beginning创建一个消费者。 通过以上步骤,就可以在Linux系统上成功部署Kafka,并进行简单的生产和消费测试。为了保证Kafka的高可靠性,可以进行Kafka的集群部署,以及与zookeeper的集成等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值