专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

KafkaKraft模式教程(一)

  说明
  Kafka版本:3。3。1
  Kraft模式!准备三台服务器
  我是通过vagrant搭配virtualbox创建的虚拟机。vagrant的Vagrantfile文件内容如下:Vagrant。configure(2)doconfig(1。。3)。eachdoiconfig。vm。definekraft{i}donode设置虚拟机的Box。指定本地的box文件node。vm。boxboxomaticcentosstream9设置虚拟机的主机名node。vm。hostnamekraft{i}设置虚拟机的IPnode。vm。networkprivatenetwork,ip:192。168。10。1{i}VirtualBox相关配置node。vm。providervirtualboxdov设置虚拟机的名称v。namekraft{i}设置虚拟机的内存大小v。memory2048设置虚拟机的CPU个数v。cpus1endendendend
  然后执行vagrantup执行创建虚拟机。创建完成的虚拟机IP和HOSTNAME如下:
  IP
  主机名
  192。168。10。11
  kraft1
  192。168。10。12
  kraft2
  192。168。10。13
  kraft3Host配置
  修改etchosts,配置hosts,保证服务器之间能够通过hostname通信。192。168。10。11kraft1192。168。10。12kraft2192。168。10。13kraft3JDK安装
  kafka的运行依赖JDK(要求JDK8),三个服务器都安装JDK〔vagrantkraft1〕sudoyuminstalljava17openjdky〔vagrantkraft2〕sudoyuminstalljava17openjdky〔vagrantkraft3〕sudoyuminstalljava17openjdky下载kafka
  kafka3。3。1下载地址下载完毕后,上传到三台服务器上,然后解压。配置修改
  修改kafka目录下的configkraftserver。properties文件。三个服务器都需要修改。特别注意:每个服务器(broker)上的配置里的node。id必须是数字,并且不能重复。LicensedtotheApacheSoftwareFoundation(ASF)underoneormorecontributorlicenseagreements。SeetheNOTICEfiledistributedwiththisworkforadditionalinformationregardingcopyrightownership。TheASFlicensesthisfiletoYouundertheApacheLicense,Version2。0(theLicense);youmaynotusethisfileexceptincompliancewiththeLicense。YoumayobtainacopyoftheLicenseathttp:www。apache。orglicensesLICENSE2。0Unlessrequiredbyapplicablelaworagreedtoinwriting,softwaredistributedundertheLicenseisdistributedonanASISBASIS,WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied。SeetheLicenseforthespecificlanguagegoverningpermissionsandlimitationsundertheLicense。ThisconfigurationfileisintendedforuseinKRaftmode,whereApacheZooKeeperisnotpresent。SeeconfigkraftREADME。mdfordetails。ServerBasicsTheroleofthisserver。SettingthisputsusinKRaftmodeprocess。rolesbroker,controllerThenodeidassociatedwiththisinstancesrolesnode。id1Theconnectstringforthecontrollerquorumcontroller。quorum。voters1kraft1:9093,2kraft2:9093,3kraft3:9093SocketServerSettingsTheaddressthesocketserverlistenson。Combinednodes(i。e。thosewithprocess。rolesbroker,controller)mustlistthecontrollerlistenerhereataminimum。Ifthebrokerlistenerisnotdefined,thedefaultlistenerwilluseahostnamethatisequaltothevalueofjava。net。InetAddress。getCanonicalHostName(),withPLAINTEXTlistenername,andport9092。FORMAT:listenerslistenername:hostname:portEXAMPLE:listenersPLAINTEXT:your。host。name:9092listenersPLAINTEXT::9092,CONTROLLER::9093Nameoflistenerusedforcommunicationbetweenbrokers。inter。broker。listener。namePLAINTEXTListenername,hostnameandportthebrokerwilladvertisetoclients。Ifnotset,itusesthevalueforlisteners。advertised。listenersPLAINTEXT::9092Acommaseparatedlistofthenamesofthelistenersusedbythecontroller。Ifnoexplicitmappingsetinlistener。security。protocol。map,defaultwillbeusingPLAINTEXTprotocolThisisrequiredifrunninginKRaftmode。controller。listener。namesCONTROLLERMapslistenernamestosecurityprotocols,thedefaultisforthemtobethesame。Seetheconfigdocumentationformoredetailslistener。security。protocol。mapCONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASLPLAINTEXT:SASLPLAINTEXT,SASLSSL:SASLSSLThenumberofthreadsthattheserverusesforreceivingrequestsfromthenetworkandsendingresponsestothenetworknum。network。threads3Thenumberofthreadsthattheserverusesforprocessingrequests,whichmayincludediskIOnum。io。threads8Thesendbuffer(SOSNDBUF)usedbythesocketserversocket。send。buffer。bytes102400Thereceivebuffer(SORCVBUF)usedbythesocketserversocket。receive。buffer。bytes102400Themaximumsizeofarequestthatthesocketserverwillaccept(protectionagainstOOM)socket。request。max。bytes104857600LogBasicsAcommaseparatedlistofdirectoriesunderwhichtostorelogfileslog。dirshomevagrantkraftcombinedlogsThedefaultnumberoflogpartitionspertopic。Morepartitionsallowgreaterparallelismforconsumption,butthiswillalsoresultinmorefilesacrossthebrokers。num。partitions1Thenumberofthreadsperdatadirectorytobeusedforlogrecoveryatstartupandflushingatshutdown。ThisvalueisrecommendedtobeincreasedforinstallationswithdatadirslocatedinRAIDarray。num。recovery。threads。per。data。dir1InternalTopicSettingsThereplicationfactorforthegroupmetadatainternaltopicsconsumeroffsetsandtransactionstateForanythingotherthandevelopmenttesting,avaluegreaterthan1isrecommendedtoensureavailabilitysuchas3。offsets。topic。replication。factor1transaction。state。log。replication。factor1transaction。state。log。min。isr1LogFlushPolicyMessagesareimmediatelywrittentothefilesystembutbydefaultweonlyfsync()tosynctheOScachelazily。Thefollowingconfigurationscontroltheflushofdatatodisk。Thereareafewimportanttradeoffshere:1。Durability:Unflusheddatamaybelostifyouarenotusingreplication。2。Latency:Verylargeflushintervalsmayleadtolatencyspikeswhentheflushdoesoccurastherewillbealotofdatatoflush。3。Throughput:Theflushisgenerallythemostexpensiveoperation,andasmallflushintervalmayleadtoexcessiveseeks。ThesettingsbelowallowonetoconfiguretheflushpolicytoflushdataafteraperiodoftimeoreveryNmessages(orboth)。Thiscanbedonegloballyandoverriddenonapertopicbasis。Thenumberofmessagestoacceptbeforeforcingaflushofdatatodisklog。flush。interval。messages10000Themaximumamountoftimeamessagecansitinalogbeforeweforceaflushlog。flush。interval。ms1000LogRetentionPolicyThefollowingconfigurationscontrolthedisposaloflogsegments。Thepolicycanbesettodeletesegmentsafteraperiodoftime,orafteragivensizehasaccumulated。Asegmentwillbedeletedwhenevereitherofthesecriteriaaremet。Deletionalwayshappensfromtheendofthelog。Theminimumageofalogfiletobeeligiblefordeletionduetoagelog。retention。hours168Asizebasedretentionpolicyforlogs。Segmentsareprunedfromthelogunlesstheremainingsegmentsdropbelowlog。retention。bytes。Functionsindependentlyoflog。retention。hours。log。retention。bytes1073741824Themaximumsizeofalogsegmentfile。Whenthissizeisreachedanewlogsegmentwillbecreated。log。segment。bytes1073741824Theintervalatwhichlogsegmentsarecheckedtoseeiftheycanbedeletedaccordingtotheretentionpolicieslog。retention。check。interval。ms300000
  三个broker的配置基本都和上面的配置一样,不同的地方就是node。id。
  kraft1node。id1
  kraft2node。id2
  kraft3node。id3
  另外还有两处需要修改。controller。quorum。voters1kraft1:9093,2kraft2:9093,3kraft3:9093【以逗号分隔的{id}{host}:{port}投票者列表。例如:1localhost:9092,2localhost:9093,3localhost:9094】log。dirshomevagrantkraftcombinedlogs【日志路径,默认是temp下的文件下,生产环境不要使用,因为linux会清理tmp目录下的文件,会造成数据丢失】生成集群ID
  随便找一个服务器,进入kafka目录,使用kafkastorage。sh生成一个uuid,一个集群只能有一个uuid!!!〔vagrantkraft1kafka2。133。3。1〕KAFKACLUSTERID(binkafkastorage。shrandomuuid)〔vagrantkraft1kafka2。133。3。1〕echoKAFKACLUSTERIDt6vWCV2iRneJB62NXxO19g
  这个ID就可以作为集群的ID格式化存储目录
  三个机器上都需要执行kraft1服务器〔vagrantkraft1kafka2。133。3。1〕binkafkastorage。shformattt6vWCV2iRneJB62NXxO19gcconfigkraftserver。propertiesFormattinghomevagrantkraftcombinedlogswithmetadata。version3。3IV3。kraft2服务器〔vagrantkraft2kafka2。133。3。1〕binkafkastorage。shformattt6vWCV2iRneJB62NXxO19gcconfigkraftserver。propertiesFormattinghomevagrantkraftcombinedlogswithmetadata。version3。3IV3。kraft3服务器〔vagrantkraft3kafka2。133。3。1〕binkafkastorage。shformattt6vWCV2iRneJB62NXxO19gcconfigkraftserver。propertiesFormattinghomevagrantkraftcombinedlogswithmetadata。version3。3IV3。启动服务器
  三个机器都需要执行kraft1服务器〔vagrantkraft1kafka2。133。3。1〕binkafkaserverstart。shdaemonconfigkraftserver。propertieskraft2服务器〔vagrantkraft2kafka2。133。3。1〕binkafkaserverstart。shdaemonconfigkraftserver。propertieskraft3服务器〔vagrantkraft3kafka2。133。3。1〕binkafkaserverstart。shdaemonconfigkraftserver。properties查看元数据(Metadata)〔vagrantkraft1kafka2。133。3。1〕binkafkametadatashell。shsnapshothomevagrantkraftcombinedlogsclustermetadata000000000000000000000。logLoading。。。Starting。。。〔2022122811:12:45,455〕WARN〔snapshotReaderQueue〕eventhandlerthreadexitingwithexception(org。apache。kafka。queue。KafkaEventQueue)java。nio。channels。NonWritableChannelExceptionatjava。basesun。nio。ch。FileChannelImpl。truncate(FileChannelImpl。java:406)atorg。apache。kafka。common。record。FileRecords。truncateTo(FileRecords。java:270)atorg。apache。kafka。common。record。FileRecords。trim(FileRecords。java:231)atorg。apache。kafka。common。record。FileRecords。close(FileRecords。java:205)atorg。apache。kafka。metadata。util。SnapshotFileReader3。run(SnapshotFileReader。java:182)atorg。apache。kafka。queue。KafkaEventQueueEventHandler。run(KafkaEventQueue。java:174)atjava。basejava。lang。Thread。run(Thread。java:833)〔KafkaMetadataShell〕lsbrokersfeatureslocalmetadataQuorumlsbrokers123lsfeaturesmetadata。versionlslocalcommitIdversionlsmetadataQuorumleaderoffset
  集群搭建完毕后,metadata中的一级目录只有brokers,features,local,metadataQuorum。创建主题,消费的时候,会增加一些其他的一级目录。比如topics,topicIds等。
  这里报了个错,不知道具体原因,目前不影响使用,暂时忽略(之后确定下)!创建主题
  我创建一个3副本、3分区的主题(itlab1024topic1)。〔vagrantkraft1kafka2。133。3。1〕binkafkatopics。shcreatetopicitlab1024topic1partitions3replicationfactor3bootstrapserverkraft1:9092,kraft2:9092,kraft3:9092Createdtopicitlab1024topic1。查看主题〔vagrantkraft1kafka2。133。3。1〕binkafkatopics。shdescribetopicitlab1024topic1bootstrapserverkraft1:9092,kraft2:9092,kraft3:9092Topic:itlab1024topic1TopicId:li8JnUSOeFHIAZdDZKAPartitionCount:3ReplicationFactor:3Configs:segment。bytes1073741824Topic:itlab1024topic1Partition:0Leader:2Replicas:2,3,1Isr:2,3,1Topic:itlab1024topic1Partition:1Leader:3Replicas:3,1,2Isr:3,1,2Topic:itlab1024topic1Partition:2Leader:1Replicas:1,2,3Isr:1,2,3再次查看元数据(Metadata)〔vagrantkraft1kafka2。133。3。1〕binkafkametadatashell。shsnapshothomevagrantkraftcombinedlogsclustermetadata000000000000000000000。logLoading。。。Starting。。。〔2022122811:24:58,958〕WARN〔snapshotReaderQueue〕eventhandlerthreadexitingwithexception(org。apache。kafka。queue。KafkaEventQueue)java。nio。channels。NonWritableChannelExceptionatjava。basesun。nio。ch。FileChannelImpl。truncate(FileChannelImpl。java:406)atorg。apache。kafka。common。record。FileRecords。truncateTo(FileRecords。java:270)atorg。apache。kafka。common。record。FileRecords。trim(FileRecords。java:231)atorg。apache。kafka。common。record。FileRecords。close(FileRecords。java:205)atorg。apache。kafka。metadata。util。SnapshotFileReader3。run(SnapshotFileReader。java:182)atorg。apache。kafka。queue。KafkaEventQueueEventHandler。run(KafkaEventQueue。java:174)atjava。basejava。lang。Thread。run(Thread。java:833)〔KafkaMetadataShell〕lsbrokersfeatureslocalmetadataQuorumtopicIdstopics
  可以看到,一级目录多了topicIds和topics。生产消息〔vagrantkraft1kafka2。133。3。1〕binkafkaconsoleproducer。shtopicitlab1024topic1bootstrapserverkraft1:9092,kraft2:9092,kraft3:909212消费消息
  上面发送了1和2两个消息,看看能否消费到。〔vagrantkraft1kafka2。133。3。1〕binkafkaconsoleconsumer。shtopicitlab1024topic1bootstrapserverkraft1:9092,kraft2:9092,kraft3:9092frombeginning12
  没问题,正常消费。Api使用
  使用Java程序,来生产和消费消息。建立Maven项目并引入依赖dependencygroupIdorg。apache。kafkagroupIdkafkaclientsartifactIdversion3。3。1versiondependency创建消费者类packagecom。itlab1024。kafka;importorg。apache。kafka。clients。consumer。Consumer;importorg。apache。kafka。clients。consumer。ConsumerRecord;importorg。apache。kafka。clients。consumer。ConsumerRecords;importorg。apache。kafka。clients。consumer。KafkaConsumer;importjava。time。Duration;importjava。util。List;importjava。util。Properties;publicclassConsumerClient{SuppressWarnings(InfiniteLoopStatement)publicstaticvoidmain(String〔〕args){PropertiespropsnewProperties();props。setProperty(bootstrap。servers,kraft1:9092,kraft2:9092,kraft3:9092);props。setProperty(group。id,test);props。setProperty(enable。auto。commit,true);props。setProperty(auto。commit。interval。ms,1000);props。setProperty(key。deserializer,org。apache。kafka。common。serialization。StringDeserializer);props。setProperty(value。deserializer,org。apache。kafka。common。serialization。StringDeserializer);try(ConsumerString,StringconsumernewKafkaConsumer(props)){consumer。subscribe(List。of(itlab1024topic1));while(true){ConsumerRecordsString,Stringrecordsconsumer。poll(Duration。ofMillis(100));for(ConsumerRecordString,Stringrecord:records)System。out。printf(offsetd,keys,valuesn,record。offset(),record。key(),record。value());}}}}创建生产者类packagecom。itlab1024。kafka;importorg。apache。kafka。clients。producer。KafkaProducer;importorg。apache。kafka。clients。producer。Producer;importorg。apache。kafka。clients。producer。ProducerRecord;importjava。util。Properties;publicclassProducerClient{publicstaticvoidmain(String〔〕args){PropertiespropsnewProperties();props。put(bootstrap。servers,kraft1:9092,kraft2:9092,kraft3:9092);props。put(linger。ms,1);props。put(key。serializer,org。apache。kafka。common。serialization。StringSerializer);props。put(value。serializer,org。apache。kafka。common。serialization。StringSerializer);try(ProducerString,StringproducernewKafkaProducer(props)){for(inti0;i10;i){producer。send(newProducerRecord(itlab1024topic1,itlabi,itlabi));}}}}
  运行消费者类,再执行生产者类,观察消费者类的控制台会输出如下内容:offset0,keyitlab1,valueitlab1offset1,keyitlab2,valueitlab2offset2,keyitlab5,valueitlab5offset3,keyitlab7,valueitlab7offset4,keyitlab8,valueitlab8offset0,keyitlab0,valueitlab0offset1,keyitlab3,valueitlab3offset2,keyitlab4,valueitlab4offset3,keyitlab6,valueitlab6offset4,keyitlab9,valueitlab9
  说明也是能够正常生产和消费消息的。
  上面基本介绍了KafkaRaft模式集群的搭建方式,并没有具体讲解配置含义(还有很多配置)。下一版会介绍!Kafka〔Kraft模式〕教程(二)基本解释
  在教程一中创建了一个基础的KafkaRaft模式集群,但是并没有细讲该模式的具体细节,本文章来讲解下,我尽可能讲解的很清晰。
  在kafka中节点服务器主要有两种角色,一种是controller,一种是broker,zookeeper和raft模式下都是这两种角色,不同的是zookeeper模式下的controller强依赖于zookeeper,zookeeper中存储了集群的元数据信息。
  但是依赖于zookeeper有很多问题:首先使用zookeeper则多了一个组件,运维成本高zookeeper符合CAP悖论中的CP,也就是说zookeeper是强一致性的组件。那么如果集群中某个节点数据变更,就得通知其他节点同步,并且要超过半数完成才行,当节点较多的时候,性能下降明显。zookeeper的设计决定了它只适用于存储一些简单的配置或者是集群的元数据,数据量大的时候性能和稳定性就会下降,一些监听器也会延时甚至丢失。zookeeper本身也是分布式系统,主从结构,如果主节点挂掉,也会选举出来主节点,他的选举并不快,并且选举的时候是不能提供服务的。
  那么Raft模式,弃用zookeeper后,controller中的信息就不会存储到zookeeper中了(zookeeper都没了),而是存储到了kafka自己的服务器上。
  通过一张图来看下变化前后的区别(图片来源网络):
  用QuorumController代替之前的Controller,Quorum中每个Controller节点都会保存所有元数据,通过KRaft协议保证副本的一致性。这样即使QuorumController节点出故障了,新的Controller迁移也会非常快。
  在Kraft模式下,只有一小组专门选择的服务器可以充当控制器(设置process。roles包含controller),controller服务器的作用是参与元数据的仲裁。
  多个controller服务器只有一个是active状态的,其他的都是standby状态的(也就是备用服务器)。
  controler服务器的数量遵循Quorum原则(过半原则),也就是说要奇数个,比如3个服务器允许1个故障,5个服务器允许2个故障。配置说明
  kraft模式下的配置文件在configkraft目录下。〔vagrantkraft3kraft〕pwdhomevagrantkafka2。133。3。1configkraft〔vagrantkraft3kraft〕lsbroker。propertiescontroller。propertiesREADME。mdserver。properties
  这里有三个properties文件,三个文件中内容基本相同,唯一不同的是process。roles的配置。broker。properties:process。rolesbroker,代表该服务器只是broker角色。controller。properties:process。rolescontroller,代表该服务器只是controller角色。server。properties:process。rolesbroker,controller,代表该服务器既是broker角色也是controller角色。
  kafka只是给我们提供了三个不同角色的配置文件,方便我们使用而已。
  文件中的具体配置内容,才是我们应该重视的,接下来一个一个说明,并尝试修改默认配置进行试验!process。roles
  用于配置服务器的角色,可以有如下配置。process。rolesbroker,代表该服务器只是broker角色。process。rolescontroller,代表该服务器只是controller角色。process。rolesbroker,controller,代表该服务器既是broker角色也是controller角色。
  也可以不配置,如果不配置,则说明当前集群不是kraft模式,而是zookeeper模式。
  说明:目前还不支持两种模式自由切换(以后是否支持也不清楚),如果要切换模式,比如重新使用binkafkastorage。sh重新格式化(重新格式化数据肯定会丢失的,特别注意!)
  同时具有broker和controller两种角色的服务器(也叫组合服务器)在开发环境中是很好的(服务器可能较少,搭建方便),但是在生产环境中是不推荐的,因为这样做会导致broker和controller的隔离性差,不可能在组合模式下单独滚动或缩放controller与broker。
  试验:
  考虑我之前搭建的集群,三台机器都是配置的process。rolesbroker,controller,这是不好的!博主信息
  个人主页:https:itlab1024。com
  Github:https:github。comitlab1024

孕晚期这些事要少做,做得越多,越容易刺激宫缩,或提前卸货其实怀孕的时候所需要注意的事情是有很多的,只有这样才能够保证孕妇的身体不出现任何问题,同时也不会让孩子出现任何问题。可是有一些女人根本就不注意自己的身体,她们总是去做出一些错误的事wenno孩子天天吃的5种东西,竟比抹布还脏很多家长想不通,为什么孩子老是生病。明明平时很留意家里清洁和孩子的饮食卫生,但孩子还是会隔三差五的感冒拉肚子!除了免疫力较低,还可能因为,罪魁祸首就是那些光明正大地藏在孩子身边,如血液发现微塑料,可造成脑损伤!宝宝常接触的日用品,赶紧自查前些天,C妈刷微博的时候,看到一则报道荷兰最顶尖的环境研究机构做的一项研究中,科学家在人类血液中首次发现了微塑料。这个消息一出,就引起了大家的广泛关注,热度居高不下。因为研究小组对教育孩子,道理讲了一万遍,就是不听,怎么办?突如其来的疫情,让我们这个城市按下了暂停键。孩子们被迫在家上网课,而我们也不得不居家办公。居家办公的日子,逃不掉陪孩子上网课的现实,都说每一个上网课的孩子背后都有一个崩溃的家长,不OPPOFindX6Pro现身,屏下镜头超高屏占比,外观绝了国内手机市场现在的局面,我们只能用风云莫测来形容了,因为现在的主流手机市场中,其实很多都是后期因为智能手机大潮才崛起的手机品牌,像一些传统品牌,其实就目前市场上来说,已经不多了,这CBA主教练年薪曝光,马布里是杨鸣的10倍,本土教练杜锋最高350万尽管CBA联赛已经进入休赛期,但是各支球队依然消息不间断,当下在主教练方面很多球队的主教练扎堆离队引人关注。首钢男篮雅尼斯浙江男篮刘维伟深圳男篮邱彪青岛男篮吴庆龙同曦男篮刘铁以及四我愿将这块金牌献给祖国中国道路中国梦奋斗者正青春2022年北京冬奥会,我担任了开闭幕式中国体育代表团旗手。在速度滑冰男子500米决赛中,我滑出了34秒32的成绩,赢得中国历史上首枚冬奥会男子速度滑冰金牌,也打破了奥运会纪录。当掌2022汤尤杯第2日关键字艰苦2022汤尤杯,昨天结束了第2个比赛日的争夺。因为还是小组赛,经常出现大比分战胜对手。虽然国羽男队和女队,都是5比0分别战胜法国和西班牙,但过程却不容易。男队对阵法国这场比赛,从上地震!3换1!50分先生将成詹姆斯队友,再见了威少美媒体报道,今年休赛期成为自由球员的拉文计划加盟洛杉矶湖人队。拉文想加盟湖人早就不是什么新鲜事了,早在2年前拉文在接受采访时,就表示他想为湖人队效力,最想合作的球员为詹姆斯。但过去篮球女神李梦拒绝美国诱惑留在中国队,实力证明何为新青年前不久的五四青年节,统一绿茶为新青年定制的正能量故事片为新青年加油正式首发。短片聚焦不同行业不同境遇下的青年们,展现他们为梦想为生活孜孜不倦努力前行的精神风貌。统一绿茶邀请了三位不徐新说出离开泰山原因引众怒,被怒批三姓家奴,连韦世豪都不如从恒大替补到山东泰山的主力,并随着球队赢得了2021赛季的中超冠军,可是谁也没有想到徐新却在赛季结束之后,选择了离开,转会到了上海海港。对于徐新的选择,球迷都是丈二和尚摸不着头脑。
模块化设计的耳机,找到属于你的色彩,魔尼悉比Rainbow耳机体验谁不想要一副独一无二的耳机呢?然而市面上虽然主打个性化的耳机不少,但无非是多些配色,或者是加上一些RGB灯效,实际上留给玩家的发挥空间并不大,直到我发现了这么一款模块化设计的耳机。岁月如此宽容,引得热泪盈眶总是轻叹岁月的仓促和无情,似繁花枯树,稍纵即逝,还没来得及欣赏冬雪美景,它已经消融。还没来得及读懂痴恋的韵味,它已拂袖而去。时光,你总是走得那么匆匆,想要得到最好的,它就会留给你最女人过了50岁,建议少穿这2种廉价色,多穿另外3种更显气质每个女人都想把自己打扮得时尚又靓丽的,尤其是对于中年女性而言,在穿搭上总是愿意花更多的心思,但如果没有掌握一定的方法和技巧,穿出来的效果也会差强人意。女人过了50岁,不管是样貌还是看上去就像有钱人的4种颜色,入秋赶紧穿起来,显贵又有气质秋天是很多人都向往的季节,因为它足够温柔,一场秋风就能带走所有的忧愁它也能让人立马放松,将生活的烦恼都抛之脑后。秋日里的穿搭,比离去的夏日要来得更加舒适,柔软亲肤的针织衫飒爽干练的一个女人开始变老的迹象越穿越花的衣服,越剪越短的头发你有没有发现,随着年龄的增长,你的眼光品位都在渐渐变化着。以前喜欢穿黑色,现在越来越爱粉色以前喜欢穿裤子,现在越来越爱裙子。这些变化不是莫名其妙发生的,随着年龄增长,我们潜意识里想数字人民币遍地开花,互联网平台跑出加速度数字人民币的推广仅仅停留在红包层面,显然不是长久有效的办法,要想真正拉动新用户并维持用户活跃度和粘性,还是要靠拥有丰富场景的互联网平台。撰文张浩东出品支付百科近日,数字人民币APP2022年7月SUV销量点评自主品牌崛起近期,乘联会公布了7月份SUV的销量成绩和排名。经历了上半年整体下滑之后,7月SUV市场迎来全面回暖。7月份SUV销量83。2万辆,同比增长18。9,环比下降5。3。在本月榜单中,秋天走轻奢复古风?发光面料个大首饰和闪耀鞋履,足以一眼惊艳告别极简主义的夏日,迎来复古风大势的秋天偏爱时髦与质感兼具的秋日复古穿衣风格,仙女们仅需在搭配过程中注意以下三点即可发光面料个大首饰和闪耀鞋履,秒变秋日轻奢复古气质女郎,尽显独特迷正式确定!曝20岁后卫加盟辽宁男篮,曾入选国家队,杨鸣意外选择这个夏天辽宁男篮可以说是非常热闹,郭艾伦坚决要出走,高诗岩交易出现问题,张镇麟也要去美国打球,不过辽宁男篮还是签下了内线新星张陈治锋。根据辽宁媒体人透露,辽宁男篮方面已经签下了20鞠婧祎洋娃娃造型,镂空针织帽橘色纱裙,真的绝美鞠婧祎是四千年美女已经人尽皆知,她这两年凭借优秀的美商和绝美的颜值多次出圈。她每次的照片都能成为大家模仿的对象,而最近,鞠婧祎又爆出一组洋娃娃造型的图片。只能说不愧是鞠婧祎,只见她售价14。98万元起,第三代哈弗H6混动和插电混动正式发布8月22日,长城品牌新能源战略发布会正式召开,在此次发布会上,哈弗汽车宣布向着新能源的布局转型,同时也发布了新能源车型所使用的全新品牌LOGO。官方还表示,2030年将正式停售燃油estar果然在藏用常规赛全败的马核,在季后赛整出757惨案因为比赛中途出现比较长的暂停(暂停时长是KPL历史之最),所以estarpro跟狼队这一战,很多人都并没有把关注点放在比赛内容上。不过,其实这一战毕竟是季后赛胜者组决赛,所以比赛内来自太空的孩子凡事竭尽全力,奇迹就会发生相信每一个孩子,内心深处都会对外星人,外太空,宇宙之外的东西感兴趣,因为每一个孩子,他们有着无限的想象力。外太空是什么样的?有哪些生物?每天在做些什么?越是到不了的世界,他们越是向铅笔芯在8岁女童头皮下寄居5年相信很多人上学时都有过被铅笔扎到的经历。被扎到后往往没有进一步处理,伤口也慢慢自愈了,但如果铅笔芯断在皮肤里了呢?8岁女童的头皮就被扎进约1厘米的铅笔芯。伤口愈合后,断笔芯就一直寄荒野里的生命,述说着人类的命运前段时间,带着孩子去野生动物园,游玩的人络绎不绝,观光车一辆接着一辆,动物们在远处玩玩地望着,不知道内心是什么感觉。游玩回来之后,孩子问我妈妈,野生动物园里的动物们,真的会快乐吗?每一个熊孩子的背后,都有一对心理扭曲的家长每一个熊孩子的背后,都有一个心理扭曲的家长。看电影最讨厌的是什么?最讨厌背后有人一直不停地踢你的椅子,而且你说还说不得,讲也讲不得,说了还有可能遭到家长的身体暴力报复。这不,8月2幼小拼音幼小拼音表完整篇每日更新,为防止资料丢失,请右上角点击关注,更多实用内容持续上传!在育儿路上难的从来都不是搜集学习资源,而是归纳整理消化吸收这些资源,以及如何带动孩子持之以恒地去学习。把我们的时间GC2022世界大战西方战线预告一战绞肉机在今晨的科隆未来游戏展直播中,开发商PetroglyphGames公布了新作世界大战西方战线(TheGreatWarWesternFront)预告,该作是以第一次世界大战为背景的战种下绿色种子巴斯夫推出中文科普绘本给地球降温巴斯夫联合少年儿童出版社推出的中文科普绘本给地球降温做低碳一族8月25日正式发布。记者了解到,该绘本专为9到12岁儿童编写,通过巴斯夫小小化学家的卡通形象嘟嘟博士向孩子们解释温室气机动战队争论不休的话题!机甲动作底盘武器究竟谁才是最重要的机动战队大作战的世界观一直都是从古代战争兵器的苏醒开战一系列的故事。是有很多不同的势力,不同的机体演绎了一幕幕让玩家们记住的剧本。大叔从小就是机器人迷,最早开始从机器人卡布达神龙斗劲爆!TopazAI全家桶8门神器中文解锁版,WinMac系统全覆盖为大家带来TopazLabs人工智能全家桶2022年最新版本,2022全新版本拥有强大的图片和视频编辑功能,一键轻松达到优秀的后期效果。无偿领取提示评论区任意回复关注私信关键词ps燕云十六声实机演示曝光,新的武侠开放世界要来了?2022科隆国际游戏展现已拉开帷幕,而在展会上我们也看到了许多新游戏的首次亮相。而在这场展会上,也出现了我们国产游戏的身影,它就是由EVERSTONE自研的国产开放世界破阵之作燕云
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网