Kafka 学习笔记(4)—— Kafka总结

1 Kafka 是什么

  • 类似JMS消息队列,结合JMS中的两种模式,可以有多个消费者主动拉取数据,在JMS中只有点对点模式才有消费者拉取数据。
  • kafka 是一个生产-消费模型。
  • Producer:生产者,只负责数据生产,生产者的代码可以集成到任务系统中,数据的分发策略由producer 决定,默认是 defaultPatition ,Utils.abs(key.hashCode) % numPartitions
  • Broker :当前服务器 kafka 进程,只管数据存储,不管是是谁生产,不管是谁消费。在集群中每个 broker都有唯一的 brokerId,不能重复
  • Topic: 目标发送的目的地,这是一个逻辑上的概念。落到磁盘上是一个 partition的目录,partition 的目录中有多个segment组合(index,log)。一个Topic 对应多个 partition(0,1,2,3),一个partition对应多个segment组合,一个segment有默认的大小是 1G 。每个partition 可以设置多个副本(replication-factor 1),会从所有的副本中选取一个leader来进行。这和 mysql 中的主从有区别,mysql 做主从是为了读写分离,在kafka中读写操作都是 leader
  • consumer ,可以有多个,每个 consumer 消费的数据都是一样的。
  • ConsumerGroup,可以有多个,每个ConsumerGroup消费的数据都是一样的。 可以把多个consumer 线程划分为一个组,组里面所有成员共同消费一个 topic 的数据,组员之间不能重复消费。

2 Kafka 生产数据时的分组策略

  • 默认是 defaultPatition ,Utils.abs(key.hashCode) % numPartitions
  • key 是 producer 发送数据时传入的,produer.send(KeyedMessage(topic,myPartitionKey,messageContent))

3 Kafka 如何保证数据的完全生产

  • ack 机制,broker 表示发来的数据已确认接收无误,表示数据已经存到磁盘。
  • 0 : 不等待 broker 返回确认消息
  • 1: 等待 topic 中某个 partition leader 保存成功的状态反馈
  • -1 : 等待 topic 中某个partition 所有副本都保存成功的状态反馈

4 broker 如何 保存数据

在理论环境下,broker 按照 顺序读写机制,可以每秒保存 60M的数据。主要通过 pagecache 机制,尽可能利用当前物理机器上的空闲内存做缓存。当前 topic 所属的broker,必定有一个该 topic 的 partition,partition是一个磁盘目录,partition目录中有多个 segment组合(index,log)。

5 broker 和 partition 的关系

int i = 0
	list{kafka01,kafka02,kafka03}
	
	for(int i=0;i<5;i++){
		brIndex = i%broker;
		hostName = list.get(brIndex)
	}

6 consumerGroup 的组员 和 partition之间如何负载均衡

最好是一一对应。如果consumer 的数量太多,必然有空闲的 consumer。

算法:
		假如topic1,具有如下partitions: P0,P1,P2,P3
		group中,有如下consumer: C1,C2
		首先根据partition索引号对partitions排序: P0,P1,P2,P3
		根据consumer.id排序: C0,C1
		计算倍数: M = [P0,P1,P2,P3].size / [C0,C1].size,本例值M=2(向上取整)
		然后依次分配partitions: C0 = [P0,P1],C1=[P2,P3],即Ci = [P(i * M),P((i + 1) * M -1)]

7 如何保证 kafka 消费者消费数据的全局有序

如果要保证消费有序,必须保证生产有序,存储有序,消费有序。
由于生产可以集群,存储就可以分片,消费可以设置为一个 consumerGroup ,要保证全局有序,就需要保证每个环节都有序。只有一个可能,就是一个生产者,一个 partition,一个消费者,这种场景和大数据应用场景相悖。

深度学习是机器学习的一个子领域,它基于人工神经网络的研究,特别是利用多层次的神经网络来进行学习模式识别。深度学习模型能够学习数据的高层次特征,这些特征对于图像和语音识别、自然语言处理、医学图像分析等应用至关重要。以下是深度学习的一些关键概念和组成部分: 1. **神经网络(Neural Networks)**:深度学习的基础是人工神经网络,它是由多个层组成的网络结构,包括输入层、隐藏层和输出层。每个层由多个神经元组成,神经元之间通过权重连接。 2. **前馈神经网络(Feedforward Neural Networks)**:这是最常见的神经网络型,信息从输入层流向隐藏层,最终到达输出层。 3. **卷积神经网络(Convolutional Neural Networks, CNNs)**:这种网络特别适合处理具有网格结构的数据,如图像。它们使用卷积层来提取图像的特征。 4. **循环神经网络(Recurrent Neural Networks, RNNs)**:这种网络能够处理序列数据,如时间序列或自然语言,因为它们具有记忆功能,能够捕捉数据的时间依赖性。 5. **长短期记忆网络(Long Short-Term Memory, LSTM)**:LSTM 是一种特殊的 RNN,它能够学习长期依赖关系,非常适合复杂的序列预测任务。 6. **生成对抗网络(Generative Adversarial Networks, GANs)**:由两个网络组成,一个生成器和一个判别器,它们相互竞争,生成器生成数据,判别器评估数据的真实性。 7. **深度学习框架**:如 TensorFlow、Keras、PyTorch 等,这些框架提供了构建、训练和部署深度学习模型的工具和库。 8. **激活函数(Activation Functions)**:如 ReLU、Sigmoid、Tanh 等,它们在神经网络用于添加非线性,使得网络能够学习复杂的函数。 9. **损失函数(Loss Functions)**:用于评估模型的预测与真实值之间的差异,常见的损失函数包括均方误差(MSE)、交叉熵(Cross-Entropy)等。 10. **优化算法(Optimization Algorithms)**:如梯度下降(Gradient Descent)、随机梯度下降(SGD)、Adam 等,用于更新网络权重,以最小化损失函数。 11. **正则化(Regularization)**:技术如 Dropout、L1/L2 正则化等,用于防止模型过拟合。 12. **迁移学习(Transfer Learning)**:利用在一个任务上训练好的模型来提高另一个相关任务的性能。 深度学习在许多领域都取得了显著的成就,但它也面临着一些挑战,如对大量数据的依赖、模型的解释性差、计算资源消耗大等。研究人员正在不断探索新的方法来解决这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值