áá ááĽá! áᏠá¨áľááá áĽá¨áľá á áá áá Apache Kafka á¨áááĽááľ áĽá¨áśá˝á á¨ááŤáľáŹáľ áĽá á¨ááááŁá áŞáŤ áá¤áąá áá° AWS RDS á°áá áłáłá¤á á¨ááá˝áá áľ áľáááľ áĽááááŁááá˘
á ááľ á¨á°áá°á á¨áĽáľá á°áá áááá á áááŤááš "á ááĽá¨á" á¨ááᥠááĽááśá˝á á¨ááľáŹáľ áĽáŤ á¨ááłá˝á áĽáá°áá áĽáá áĽááľáĽá˘ áá áááá á¤áľ áááľ ááá᪠á áááἠá ááĽááľ áááľááľ ááá áá¨ááá áá˝áá ᣠá ááĽááśá˝ áá áá°áŚá˝ ááá á¨áááἠáá¤áśá˝ ᣠááá°.
áá áá ááłá á áľááľ áĽá á áľááľ áłáá áá áĽáá´áľ áĽáá°áá°áá አ- á ááŤáŠ áľá áŤááĽáĄ! ááľ!
ááá˘áŤ
á áĽááἠá¨áá°á áá á áŤáá áá¨áá á áĽááá°á áá áááá á á áááá áľáááśá˝ ááľáĽ ááá áá á°á áĽáľáá˝á áá°áŁáᢠááá á áŁá áłáá á¨áá áĽááŽá˝ á ááą á¨Apache Kafka áĽá Spark Streaming áłáá°á ááᣠáŤá፠á¨áᢠáááĽááľ ááŹáśá˝ áĽá¨áľ áááĽáŤáᣠáĽá Spark Streaming áĽááá á áĽá˝áá˝ á á°áá°á á¨áá ááŠááľ áŤáľáŹáłáá˘
á¨áá°áá áŞáŤáá áľá á°áľ ááťáťá áááťáťá, á¨áá°áť ááĽáŚá˝á - á¨áá°áť ááĽáŚá˝á áĽáá áááá. á áá áá´áŁ á¨áľááá áĽá¨áľ ááá á¨á ááá ááἠáááś ááááľ á˛áááᣠáá° áá¨á¨áťá á¨áá°áť ááĽáĽ áĽáť ááááľ áĽá á¨á፠áľááśá˝á ááá á á áá áľá˘
á¨á°áááŁá áľáááľ á ááá´áá¸á
áŤáááá áááá˝áĄ-
Apache Kafka á¨á°á°áŤá¨ á¨á áľááľ áĽá á¨á°áá áááľ ááááἠáľáááľ ááᢠááááąá á¨ááľáá áá áĽá á¨ááľáá áá á¨áááĽááľ áááł á°áľááᢠá¨ááἠááĽááľá ááá¨áá¨á á¨áŤá፠áááááśá˝ á á˛áľá áá á°á¨áá˝á°á á áááľá°á ááľáĽ ááŁááᢠá¨áŤá፠áľáááľ á¨á°áááŁá á ZooKeeper áááłá°á á áááááľ áá ááá˘Apache Spark áĽá¨áľ - á¨áĽá¨áľ áááĽá áááľáŹáľ á¨áľááá á áŤáᢠá¨áľááá áĽá¨áľ ááá á¨á°áááŁá á ááááŽ-áŁá˝ á ááá´áá¸á á˛áá á¨ááἠáĽá¨áľ áĽáá° á°á¨áłáłá áĽáá á á¨ááἠáĽá˝áá˝ á˛á°á¨áá ááᢠáľááá áĽá¨áľ á¨á°ááŤáŠ áááŽá˝ áá¨áá áááľáłá áĽá áá° áľááá˝ áľáĽáľáŚá˝ áŤáá á°ááᢠá á˛áľ ááŹáá˝ á áá°á á ááá°áśá˝ ááá áŤá. á áĽáŤááłááą á¨áá ááá°áľ ááááŞáŤ áá á á˛áľ ááŹáľ ááá áŤá áĽá á áá áá ááľáĽ á¨á°áá áá ááááá ááἠá áĽá á ááľáĽ ááŤá°áłáᢠá ááá°áą áá¨á¨áť áá á¨ááŹáľ áĽáľááľ áááá. á¨ááá°áą áá á á¨ááá°áá áŁá˝ ááá°áľ á°áĽá á áá áŤá áááŞáŤ áá;Apache Spark SQL - á°ááá áá°áľá ᨠSpark á°ááŁáŤá ááŽááŤááá áá áŤáŁááŤáᢠá¨á°ááᨠáá¨á ááľá áŤáá áááĽá áááľá áááá ááááŚá˝ á ááľ áá á á¨ááľá áľáĽáľáĽá áŤááááłáᢠSpark SQL á¨á°ááŤáŠ á¨á°ááአá¨áá¨á áááŽá˝ ááĽá áľá áá°ááá áĽá á áźá áá¨á ááááľ ááááŤáľ á¨áááááľá á¨ááááŚá˝á ááľáŽá˝ á áĽááľ á°ááľáŽ áááŁáľ áá˝áá áĽáá˛áá DataFrame APIs áŤáááŁáá˘AWS RDS á á ááá á ááĽáł á¨áá°áłá°á¨á á á áááŤáááľ ááŤá˝ á áá á°áá áá á¨á°áá°á¨á° áááááľ áłáłá¤áᣠáááááᣠá á áŤáá áĽá ááŹáľá ááá á¨ááŤá°áá á¨áľá á áááááľ ááá˘
á¨áŤá፠á áááá ááŤá áĽá áááľ
áŤááŤá á ááĽáł á¨áá ááá á ááľ á፠áĽááłáááľ áá¨ááἠá ááĽááľ, ááááŤáąá JVM ááľáŤ áĽá á áá áááááĄ-
sudo apt-get update
sudo apt-get install default-jre
java -version
á¨áŤá፠áá áááľáŤáľ á á˛áľ á°á áá áĽááá ááĄ-
sudo useradd kafka -m
sudo passwd kafka
sudo adduser kafka sudo
á ááá á á¨áá¨áá፠ááłáŞáŤáá á¨áŚáá´ááá Apache Kafka áľá ᨠáá˝ áŤáááąáĄ
wget -P /YOUR_PATH "http://apache-mirror.rbc.ru/pub/apache/kafka/2.2.0/kafka_2.12-2.2.0.tgz"
á¨áá¨á°áá áá á°á áŤááĄáĄ
tar -xvzf /YOUR_PATH/kafka_2.12-2.2.0.tgz
ln -s /YOUR_PATH/kafka_2.12-2.2.0 kafka
ááŁáŠ á°á¨á á ááŤá áá. áĽáááłá áá ááŁáŞ á áá áśá˝ áááá ᨠApache Kafka áŁá áŞáŤáľ áá á áá áĽáá˛á áá á ááá áąá. áááłá áááááśá˝ á¨ááłá°áá áľá áááľáŁ ááľáĽáŁ áĄáľá áá°ááᢠáá áá áááááĽáŁ á¨áá á¨áľ áááá áĽáááľááĄ-
vim ~/kafka/config/server.properties
á ááá áá¨á¨áť áá á¨áá¨á°ááá áŤááá˘
delete.topic.enable = true
á¨áŤá፠á ááááá á¨ááááá á áᾠᨠZooKeeper á ááááá áááá áŤáľáááááłá ᣠá¨áŤá፠áľáááľ áá á¨áááŁáá á áἠáľááŞááľ áĽáá áááá
Cd ~/kafka
bin/zookeeper-server-start.sh config/zookeeper.properties
ZooKeeper á á°áłáŤ áááł á¨ááᨠá áá á¨áŤá፠á áááá á á°áᨠá°áááá ááľáĽ áĽááááŤáááĄ
bin/kafka-server-start.sh config/server.properties
ááĽááľ á¨ááŁá á á˛áľ áááľ áĽááá ááĄ-
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 3 --topic transaction
á¨ááááá áááááŽá˝ áĽá áľáááá˝ áĽááľ áŤáá áááľ ááá áŠá áĽáá¨áááĽáĄ-
bin/kafka-topics.sh --describe --zookeeper localhost:2181
á á˛áľ áá°áá á¨á áááľ á ááŤášá áĽá á¸áášá á¨ááááá¨á áááá˝á áĽáááłá˘ áááááśá˝á ááá áĽá ááá áá áĽáá´áľ ááá¨á áĽáá°áá˝á áá á°á¨á᪠ááááŽá˝ á ááá á°ááśá˝ ááľáĽ á°á˝ááá -
á¨á ááá á˝áá
á ááŤáš á áááá° áá¨á áŤáááŤá - á á¨á°á¨ááą 100 áááááśá˝á˘ á¨áááá° áá¨á áľáá áŚáľáľ ááľáŽá˝á á¨áŤá áááá áááľ áááłá˝á ááá˘
- á áááŤá - á¨áĽáľá á°áá á¨áá¸áĽá áľ áŚáł áľá;
- áááἠ- á¨ááĽááľ ááááŹ;
- áá á - á¨ááĽááľ áá á. áááᥠá áŁáአá¨ááá áŤáŤ áááἠáᢠá¨áá, áĽá á˝áŤá á¨áá á ááłá áááá.
á¨á ááŤáš áŽáľ áá áá áááľááá˘
from numpy.random import choice, randint
def get_random_value():
new_dict = {}
branch_list = ['Kazan', 'SPB', 'Novosibirsk', 'Surgut']
currency_list = ['RUB', 'USD', 'EUR', 'GBP']
new_dict['branch'] = choice(branch_list)
new_dict['currency'] = choice(currency_list)
new_dict['amount'] = randint(-100, 100)
return new_dict
á ááá áᣠá¨áááŞáŤ áá´á á áá ááᣠáááĽááľ áá° á ááááŠáŁ áá°áááááá áááľáŁ á JSON á áá¸áľ áĽáááŤááá˘
from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers=['localhost:9092'],
value_serializer=lambda x:dumps(x).encode('utf-8'),
compression_type='gzip')
my_topic = 'transaction'
data = get_random_value()
try:
future = producer.send(topic = my_topic, value = data)
record_metadata = future.get(timeout=10)
print('--> The message has been sent to a topic:
{}, partition: {}, offset: {}'
.format(record_metadata.topic,
record_metadata.partition,
record_metadata.offset ))
except Exception as e:
print('--> It seems an Error occurred: {}'.format(e))
finally:
producer.flush()
áľááŞááąá áľáááľ á á°áááá ááľáĽ á¨áá¨á°ááľá áááááśá˝ áĽááááááĄ-
áá
áááľ ááá ááá áĽá áĽáá°áááá áá á¨áá°áŤá - á ááŤáš áá°áááááá áááľ áááĽááľ áŤáááŤá áĽá áááŤáá˘
ááŁáŠ áĽááá áľáááá ááŤá áĽá áá
á á¨áááĽááľ áá°áľ ááŤááľ ááá˘
Apache Spark á á ááŤá áá
ᨠApache Spark áááἠáĽá á¨áá°á á ááťá¸á áááľá°á ááľááľ ááľá¨á ááá˘
á ááá°ááá áá ááá˝á áĽá áĽá¨áľ áááá á á¨áᎠáá°ááŤáŠ á¨áľááľ á áááśá˝ áľáá á˛á°áĽ áľááá á¨MapReduce áá´á áłáá á á°ááŁá áá á á ááťá¸á áá ááŁáᢠá°áááá˝á ááá á°ááłáľá áłáá áĽá á ááá°ááá áĽáá˛á°áŠ á¨ááŤáľá˝áá ááĽááľ áľááá á¨áá°á áá á áŤáá ááἠá áá°áŤá áľ áá ááĽááľ áľáá áá ááŤááłáᢠáá á ááĽááľ áááľá¨áľ á¨áľááá áľáá áĽááŤáŹáá˝ á ááą á¨ááľáłááť áľááśá˝á á¨ááľáŤáľ á˝ááł ááá˘
áá áááá á Scala ááľáĽ á°á˝ááᣠáľááá ááááŞáŤ ááŤá áŤáľáááááłááĄ-
sudo apt-get install scala
á¨áľááá áľáááľá á¨áŚáá´ááá áľá áŁá˘áŤ áŤáááąá˘
wget "http://mirror.linux-ia64.org/apache/spark/spark-2.4.2/spark-2.4.2-bin-hadoop2.7.tgz"
áá á°áŠá áááááľáĄ-
sudo tar xvf spark-2.4.2/spark-2.4.2-bin-hadoop2.7.tgz -C /usr/local/spark
áá° Spark á¨áááľá°áá ááááľ áá° bash ááá áŤáááĄ-
vim ~/.bashrc
á¨áá¨á°ááľá ááľááŽá˝ á á ááłáá á áŠá áŤááá˘
SPARK_HOME=/usr/local/spark
export PATH=$SPARK_HOME/bin:$PATH
á bashrc áá áááŚá˝á áŤá°á¨á á áá á¨áá¨á°ááá áľááá áŤááą:
source ~/.bashrc
AWS PostgreSQLá á áá°ááŤáľ áá
á¨ááἠááłáá áááľáááľ áááŤá, á¨á°áááŁá á¨áá áá¨á á¨á á¨áśá˝ ááľáĽ á¨ááááá áľ. áá áá áááľá¨á á¨AWS RDS á áááááľá áĽáá ááááá˘
áá° AWS áŽááśá áááą -> AWS RDS -> á¨ááἠááłáá˝ -> á¨ááἠááł ááá áŠáĄ
PostgreSQL á ááá¨áĄ áĽá á¨áááĽááá ááá á á
áŤáľááá˘
ááááŤáąá áá
ááłá á¨á°á°áá°áá ááľáá
ááłá ááááá˝ áĽáť ááᣠáĽá âá˘áŤááľâ (áá á°á¨á) áá á áááá áĽáá ááááá˘
á ááá á áá á°á¨á á ááá áłáĽá áá ááááľ áŤáľáá áĽá á¨á፠á áá ᨠt2.micro áááá á áŤáľ-á°á áĽáá°á ááá - ááá áĽááłá á°áŤá ᣠáá áá áĽá áá°ááŁáŤá˝á á°áľáá ááá˘
á áŁá á áľááá áááŽá˝ áá¨á°áá-á¨á˛á˘ ááłá áľá, áá á°á áá áľá áĽá á¨ááá áá. ááłááá áĽááĽáŤáĄ myHabrTestᣠáá á°á ááᥠááĽá, á¨ááá áá: ááĽá 12345 áĽá á áááĽáá ááá áá á á
áŤáľáá:
ááŁáŠ áá˝ ááłáłá¤á á ááááŤá˝á á¨áá á°á°áŤá˝ááľ (á¨ááἠá°á°áŤá˝ááľ) áĽá áá°áŚá˝ ááááľ áááááľ áŤáá¸áá áááŞáŤáá˝ áááá˘
áVPC á°á
áááľ áĄáľá á á˛áľ ááźáľ áĽááá áᣠáá
á áá° á¨ááἠááłá˝á á áááá á áááľ 5432 (PostgreSQL) ááŤá ááłá¨áť ááá
áłáá˘
á á°áᨠá¨á áłá˝ ááľáŽáľ áá° AWS áŽááśá á VPC Dashboard ->á¨á°á
áááľ áĄáľáá˝ ->á¨á°á
áááľ áĄáľá ááá áĽááá ááĄ
áá°á
áááľ áĄáľá áľá á ááá
á°áá - PostgreSQL ᣠááá፠ᣠáá
áĄáľá á¨á¨áľáá VPC áá ááŤáŤá áĽááłáá áľ ááááš áĽá áá á áááá á á
áŤáľááá˘
á¨áłá˝ á ááľá áá áĽáá°ááłá¨á á á˛áľ áá°áá á¨á áĄáľá áá°áĽ 5432 á¨ááá˘áŤ á°ááŚá˝á áĽáááááᢠáá°áĄá áĽáŤáľá áááá˝ á áá˝áá ááá áá á¨á°áááá ááááľ áááá ááľáĽ PostgreSQL á ááá¨áĄá˘
á áľááá áľáááá áĽá´áą ::/0 áááľ á¨á áá ááŞáŤ áá áááአáᢠáľáŤáá ááááľ áááľ áá áŁáá
á á ááá áĽáááľ á áá°áá ᣠáá ááłááá ááá°áá°á ᣠáá
áá á áŤááľ áĽáá ááá˘
áá° á áłáš áá˝ áĽááááłáá ᣠâá¨áá á
ááĽáŽá˝á áŤáá
áŠâ ááááą áĽá ᨠVPC á°á
áááľ áĄáľáá˝á ááá¨áĄ -> áŤááľá ᨠVPC á°á
áááľ áĄáľáá˝á ááá¨áĄ -> PostgreSQL á ááá ááľáĽá˘
á ááá á á ááá ááľáĽ á¨ááἠááł á ááŤáŽá˝ -> á¨ááἠááł áľá -> áľáá áŤááá - habrDB.
á ááŁáŞááľ ááľáŹá á¨áá°áá¨á (á¨ááľáŹ áá፠áá - 0 áááľ) ᣠááľáľá áĽá á¨á áááá áááá¤áá˝á á¨áá°áá¨á á áľá°áá á¨á°ááŠáľá áááŞáŤáá˝ áá°á áĽáá˝áááᢠá ááŤáŠá á á
áŤáľáá á¨ááἠááł ááá áŠ:
á¨áĽá¨áľ á°ááŁáŁáŞ
á¨áá¨á¨áťá á°á¨á ᨠSpark áĽáŤá ááłá á áááá, áá á á á¨áááľ á°á¨ááľ á¨áŤá á á˛áľ áá¨áá á ááŤááľ áá¤áąá áá° áłáłá¤á áŤáľááŁá.
á¨áá áĽáá°á°áááá á¨áá°áť ááĽáŚá˝ á áľááá áĽá¨áľ ááľáĽ áŤá áľá á°áśá˝á ááťáťáá áááľá áľ áááá áŤááŁá¸á áá áá´áá˝ áá¸áᢠá¨áá°áť ááĽáŚá˝á áĽáá áááá áĽá á¨áá°áą áĽáá˝áľ á˛á¨á°áľ á¨áľááá áĽá¨áľ ááá á¨á ááá áá¨á áááááľ áá° áá¨á¨áťá á¨áá°áť ááĽáĽ ááááľ áĽá á¨áą áá áľááśá˝á ááá á áĽáť áááááá˘
á¨áá°áť ááĽáĄ áá¨á á áá¨áá˝á áľ áľá á°áľá á¨ááłááľ á áľá°ááá á¨ááá áľáááľ (áááłá á¤á˝á˛á¤áá¤áľáŁ á¤áľ 3ᣠááá°) áá áá፠á áááááľ á¨áá°áť ááĽáĽá ááááľ ááťááᢠáá á¨áá¨áááá áááłá á :
streamingContext.checkpoint(checkpointDirectory)
á áĽá ááłá ááľáĽ ᣠá¨áá¨á°ááá á áŤááľ áĽáá áááá ᣠáááľá ᣠá¨áá°áť ááĽáĽ áłááŹáá°áŠ áŤá ᣠá¨á፠á ááľ á¨ááĽáĽá áá¨á áĽáá°áá ááá áŤáᢠáááŤá á¨áá (áááľá áááááŞáŤ áá áĽá¨á°ááá áá)ᣠá¨á፠á¨FunctionToCreateContext á°ááŁá á á˛áľ á ááľ áááá á áĽá DStreamsá ááááááľ áá áŤááĄ-
from pyspark.streaming import StreamingContext
context = StreamingContext.getOrCreate(checkpointDirectory, functionToCreateContext)
á¨KafkaUtils á¤á°-áá˝áááľá createDirectStream áá´á á áá áá á¨"ááĽááľ" áááľ áá ááááááľ DirectStream áááá áĽáááĽáŤáááĄ
from pyspark.streaming.kafka import KafkaUtils
sc = SparkContext(conf=conf)
ssc = StreamingContext(sc, 2)
broker_list = 'localhost:9092'
topic = 'transaction'
directKafkaStream = KafkaUtils.createDirectStream(ssc,
[topic],
{"metadata.broker.list": broker_list})
áᢠáááĽá á JSON á áá¸áľ áá°áá°ááĄ-
rowRdd = rdd.map(lambda w: Row(branch=w['branch'],
currency=w['currency'],
amount=w['amount']))
testDataFrame = spark.createDataFrame(rowRdd)
testDataFrame.createOrReplaceTempView("treasury_stream")
Spark SQL á á áá áá ááá áá§á°á áĽá áá¤áąá áá° áŽááśá áĽáááŁáááĄ
select
from_unixtime(unix_timestamp()) as curr_time,
t.branch as branch_name,
t.currency as currency_code,
sum(amount) as batch_value
from treasury_stream t
group by
t.branch,
t.currency
á¨áĽáŤááá á áŤá ááááľ áĽá á áľááá SQL á áŠá ááľáŹáľáĄ-
sql_query = get_sql_query()
testResultDataFrame = spark.sql(sql_query)
testResultDataFrame.show(n=5)
áĽá á¨á፠á¨á°áá ááá á¨á°ááá° ááἠá AWS RDS ááľáĽ áŁáá á áá á¨áĽ ááľáĽ áĽááľááá áááᢠá¨áá á°áąá áá¤áľ áá° á¨ááἠááł á áá á¨áĽ áááľááἠá¨áłáł ááŹá áááá á¨ááá áá´á áĽáá áááááĄ-
testResultDataFrame.write
.format("jdbc")
.mode("append")
.option("driver", 'org.postgresql.Driver')
.option("url","jdbc:postgresql://myhabrtest.ciny8bykwxeg.us-east-1.rds.amazonaws.com:5432/habrDB")
.option("dbtable", "transaction_flow")
.option("user", "habr")
.option("password", "habr12345")
.save()
á¨AWS RDS áá áááááľ áľááááááľ áĽááľ áááľá˘ á°á áááá áĽá á¨ááá ááá á "Deploying AWS PostgreSQL" á°á¨á áá ááᢠáĽáá° á¨ááἠááł á áááá áŠá áá¤áᣠá¨áááááľ áĽá á°á áááľ ááá ááľáĽ á¨ááłá¨áá á¨áá¨á¨áť ááĽáĽ áá áá á ááŚáľá˘
áľáááá áĽá áŤááŤá á áľááá ááááááľ á áá˛ááŹáąá á áá áá áľáŤáá á smark-submit ááŤááľ á ááĽááľá˘ áĽáááł-áĽá¨áľ-kafka-0-8_2.11. á á°á¨ááŞáᣠá¨PostgreSQL áłáłá¤á áá ááááŁáŁáľ á ááľ áĽáá ááááᣠá áĽá áá˝ áĽáááá¸áááá˘
ááľááŞááą á°ááááááľ á¨áááĽááľ á ááááŠá áľá áĽá áá¨áá áĽáá° ááĽááľ áááŞáŤáá˝ ááá á á¨ááááááá áááľ áĽáááŁááá˘
áľááá áľáááąá ááááľ áĽá áááá¨á ááá á áá áá-
spark-submit
--packages org.apache.spark:spark-streaming-kafka-0-8_2.11:2.0.2,
org.postgresql:postgresql:9.4.1207
spark_job.py localhost:9092 transaction
ááá ááá á°áłáŤ! á¨áłá˝ á ááľá áá áĽáá°ááłáŠáľ á áááŹá˝á áĽá¨áá° áĽáŤá á ᨠ2 á°á¨ááľ á áłá˛áľ á¨áá á°áľ áá¤áśá˝ ááłáŤá ááááŤáąá á¨áĽá¨áľ á ááľ áááá áľáááĽá á¨áĽá á ááá°áąá áá° 2 á°á¨ááľ á ááá á°ááá˘
á ááá á, á á°áá á¨áĄ ááľáĽ ááááŚá˝á áááá°á˝ áá° áłáłá¤á á ááľ ááá áá áá áĽáá°áááá á¨ááĽááľ_áá°áľ:
áá°áá°ááŤ
á áá á˝áá ááľáĽáŁ Spark Streamingá á áá áá á¨Apache Kafka áĽá PostgreSQL áá á áá°áŁá á áá¨áá á¨áá°áŤá¨áľ ááłá á°ááľáˇáᢠá¨á°ááŤáŠ áááŽá˝ á¨á°áá áá¨á áá á áĽáŤá°á á áááŁáąáŁ á¨áĽááá°á áá áĽá á¨áĽá¨áľ á áááŹá˝áá˝á áááá á á¨áľááá áĽá¨áľ á°ááŁáŤá á áááłá ááááľ á¨áŁáľ ááá˘
áááá á¨ááá áŽáľ á áĽá áá¨ááť ááľáĽ ááááľ áá˝ááá˘
á áá á˝áá áá ááááŤá¨áľ á°áľá°á áá, á áľá°áŤá¨áśá˝áá á áááľ áĽá áĽááá, áĽá á°áá, á¨ááá á¨áááá¨áłá¸á á ááŁá˘áá˝ ááᢠáľá˝áľ áĽáá°áá°áĽ á°áľá á á°áááá.
áľáŹáľ áĽáááá!
áá. á ááááŞáŤ á¨á áŤáŁá˘ ᨠPostgreSQL á¨ááἠááł ááá áá áłá
áś áá áᣠááá áá áAWS áŤáá áá
á á ááťá á¨ááἠááłáá áá° á°ááá áááááłááľ áá°ááŠá˘ á áá
áááľ áá á áááĽáá ááŁáĽá, AWS Kinesis áĽá AWS EMR á áá áá á AWS ááľáĽ á¨áá á¨á°ááááá á á ááá áľáááľ áĽáá´áľ áĽáá°áá°áá አá áłáááłáá. áááá á°á¨áłá°á!
ááá: hab.com