Stream Verinin Azure SQL Database’de Table Partitioning ile Tutulması (Demo)

Advanced Data Analytics başlığı altında daha önce, stream olarak gelen çok büyük miktarda verinin Microsoft Azure Event Hubs servisi ile nasıl elde edilebileceği, Microsoft Azure Stream Analytics servisi ile nasıl analiz edilebileceği ve Microsoft Power BI kullanılarak gerçek zamanlı olarak nasıl raporlanabileceğini ele almıştık. Aynı zamanda stream verinin daha sonra analizinin yapılması için Azure SQL Database‘de nasıl saklanabileceğini serinin önceki yazılarında göstermiştik. Bugünkü konumuza geçmeden önce göz atmak isteyenler için Advanced Data Analytics başlığı altındaki makale serisine aşağıdaki linkten erişebilirsiniz:

http://www.abdullahaltintas.com/index.php/real-time-click-stream-analizi-icin-microsoft-azure-cozumleri-serisi/

Günlük hayatımızda IoT kavramı odağımıza girdikçe üretilen verilerden anlamlı sonuçlar çıkartabilmek, çok büyük miktarlarda üretilen verileri hızlı ve doğru bir şekilde elde edip analizini yapabilmek özellikle veri bilimciler için çok önemli bir noktaya geldi. Internet of Things (IoT) cihazları, sensörler, akıllı çözümler, sistemlere ait loglar ve click stream verileri gibi saniyede milyonlarca veri üreten sistemlerden bu verileri almak ve işlemek için çeşitli yöntemler kullanılmakta ve bu ihtiyaçlar karşılanmaktadır. Microsoft teknolojileri açısından baktığımızda Azure Event Hubs, Azure Stream Analytics çözümleri ile bu veriler etkin bir şekilde elde edilebilmekte ve analizi yapılabilmektedir. Ardından analizi yapılan veriler ihtiyaca bağlı olarak farklı çıktılar üretebilmekte ve gerektiğinde tekrar analiz edilmek üzere saklanabilmektedir. Özellikle tekrar analiz edilmek üzere saklanmak istenilen bu büyük miktarda veriler Azure BLOB Storage gibi bir çözüm ile saklanabileceği gibi bazı durumlarda Microsoft’un bulut sistemlerdeki ilişkisel veritabanı çözümü olan Azure SQL Database hizmeti ile tablo yapısında da tutulabilmektedir. Ancak veri miktarı çok büyük olduğundan Azure SQL Database çözümünde bu veriler tek bir tabloda tutulmak istenildiğinde yönetilebilirlik ve ölçeklenebilirlik bakımından parçalı bir yapıda tutulması bizlere avantaj ve performans kazandıracaktır. Bu makalemizde stream olarak akan click-stream verisinin Azure Stream Analytics’ten çıktıktan sonra Azure SQL Database hizmetinde Table Partitioning yapısı kullanılarak nasıl tutulabileceğini ele alacağız.

Serinin önceki yazılarında kullanmış olduğumuz uygulamayı benzer şekilde devreye sokacağız. Uygulama üzerinde kullanıcıların oluşturduğu tıklamalardan meydana gelen click stream verisinin Azure Event Hubs ile nasıl elde edildiğini ve Azure Stream Analytics ile nasıl analizin yapıldığını linklerden öğrenebilirsiniz. Yapacağımız demoda bu aşamaya kadar olan süreci daha önce aktarmış olduğumuz için geçiyor ve direkt olarak Stream Analytics job’ının output kısmından anlatıma başlıyoruz. Senaryomuzda verileri saklamak için kullanacağımız Azure SQL Database‘i örneğimize başlarken oluşturmamız gerekiyor. Bunun için Azure portali üzerinde sol alt kısımda bulunan New sekmesine tıklayarak Data Services seçeneğini seçiyoruz. Devamında SQL Database servisini seçip Custom Create diyerek ilgili sayfaya erişiyoruz.

sqldbcreate

Yukarıdaki resimde olduğu gibi ilgili servis için gerekli olan kısımları doldurarak ilerliyoruz. Biz örneğimizde ilk kısımda veri tabanı adı olarak AltintasDb veriyoruz. Standart S0 seçeneği bizler için yeterli olacağından bu seçenekleri değiştirmiyoruz. Ardından daha önce oluşturulmuş bir server’ımız yoksa New SQL database server seçeneğini seçerek ilerliyoruz.

sqldbcreate2

Bir sonraki ekranda ilgili SQL DB server‘ına erişim için kullanacağımız yetkili bir kullanıcı için login ve password belirliyoruz. Datacenter için bölge seçimini yapıp aşağıda bulunan iki seçeneği de aktif hale getiriyoruz. Burada ilk seçenekte Azure’a ait kullanmış olduğumuz diğer servislerin bu database server’ına erişimi için yetki vermiş oluyoruz. İkinci seçenekte ise Azure SQL Database‘in en son versiyonu olan V12 versiyonu olacak şekilde database’i oluşturacağımızı seçiyoruz. Örneğimiz için bu seçenek oldukça önemli çünkü Azure SQL Database için Table Partitioning desteği V12 ile beraber gelen bir özellik olup daha önceki versiyonlarında bu özellik desteklenmemekteydi. Azure SQL Database V12 ile gelen yeniliklere göz atmak isterseniz daha önce yapmış olduğum bir webcast’e ait kayda  bu linkten erişebilirsiniz.

İlgili işlemleri tamamladığımızda Azure SQL Database server‘ı çok kısa bir sürede ayağa kalkacak ve kullanıma hazır hale gelecektir. Bu aşamadan sonra Azure SQL Database servisinde oluşturduğumuz AltintasDb adındaki veri tabanı üzerindeki işlemleri daha rahat yapabilmek için SQL Server Management Studio (SSMS) ile bu database server’ına bağlantı sağlıyoruz. ServerName olarak Azure SQL Database servisinin Dashboard ekranında bulunan servername’i, SQL Server Authentication kısmında ise kullanıcı adı ve şifre olarak az önce oluşturduğumuz yetkili kullanıcı adı ve şifresini giriyoruz. Burada bağlantı kısmında hata alınırsa Azure SQL Database‘e bağlantı için şu an kullanmakta olduğumuz pc’nin IP Adresi firewall rule olarak eklenmesi gerekmektedir. Bu işlem için de SSMS 2016 sürümünde çıkan pop-up ekranından veya Azure portal üzerinde bulunan SQL Database servisindeki Configure kısmından IP Adresimiz için rule tanımlayabilmekteyiz.

Bu aşamadan sonra artık Table Partitioning kullanarak her bir güne ait verilerin ayrı bir partition’da tutulmasını sağlayacak şekilde Partition Function, Partition Scheme ve tablomuzu oluşturuyoruz.

İlk olarak her bir güne ait verileri ayrı bir partition’da tutmak istediğimiz için her bir gün için bir partition oluşturacak şekilde pf_DayOfTheYear isminde bir partition function oluşturuyoruz. Bunun için gerekli olan kodu aşağıda bulabilirsiniz:

CREATE PARTITION FUNCTION [pf_DayOfTheYear](DATE) AS RANGE LEFT FOR VALUES 
(
'2016-01-01',
'2016-01-02',
'2016-01-03',
'2016-01-04',
'2016-01-05',
'2016-01-06',
'2016-01-07',
'2016-01-08',
'2016-01-09',
'2016-01-10',
'2016-01-11',
'2016-01-12',
'2016-01-13',
'2016-01-14',
'2016-01-15',
'2016-01-16',
'2016-01-17',
'2016-01-18',
'2016-01-19',
'2016-01-20',
'2016-01-21',
'2016-01-22',
'2016-01-23',
'2016-01-24',
'2016-01-25',
'2016-01-26',
'2016-01-27',
'2016-01-28',
'2016-01-29',
'2016-01-30',
'2016-01-31',
'2016-02-01',
'2016-02-02',
'2016-02-03',
'2016-02-04',
'2016-02-05',
'2016-02-06',
'2016-02-07',
'2016-02-08',
'2016-02-09',
'2016-02-10',
'2016-02-11',
'2016-02-12',
'2016-02-13',
'2016-02-14',
'2016-02-15',
'2016-02-16',
'2016-02-17',
'2016-02-18',
'2016-02-19',
'2016-02-20',
'2016-02-21',
'2016-02-22',
'2016-02-23',
'2016-02-24',
'2016-02-25',
'2016-02-26',
'2016-02-27',
'2016-02-28',
'2016-02-29',
'2016-03-01',
'2016-03-02',
'2016-03-03',
'2016-03-04',
'2016-03-05',
'2016-03-06',
'2016-03-07',
'2016-03-08',
'2016-03-09',
'2016-03-10',
'2016-03-11',
'2016-03-12',
'2016-03-13',
'2016-03-14',
'2016-03-15',
'2016-03-16',
'2016-03-17',
'2016-03-18',
'2016-03-19',
'2016-03-20',
'2016-03-21',
'2016-03-22',
'2016-03-23',
'2016-03-24',
'2016-03-25',
'2016-03-26',
'2016-03-27',
'2016-03-28',
'2016-03-29',
'2016-03-30',
'2016-03-31',
'2016-04-01',
'2016-04-02',
'2016-04-03',
'2016-04-04',
'2016-04-05',
'2016-04-06',
'2016-04-07',
'2016-04-08',
'2016-04-09',
'2016-04-10',
'2016-04-11',
'2016-04-12',
'2016-04-13',
'2016-04-14',
'2016-04-15',
'2016-04-16',
'2016-04-17',
'2016-04-18',
'2016-04-19',
'2016-04-20',
'2016-04-21',
'2016-04-22',
'2016-04-23',
'2016-04-24',
'2016-04-25',
'2016-04-26',
'2016-04-27',
'2016-04-28',
'2016-04-29',
'2016-04-30',
'2016-05-01',
'2016-05-02',
'2016-05-03',
'2016-05-04',
'2016-05-05',
'2016-05-06',
'2016-05-07',
'2016-05-08',
'2016-05-09',
'2016-05-10',
'2016-05-11',
'2016-05-12',
'2016-05-13',
'2016-05-14',
'2016-05-15',
'2016-05-16',
'2016-05-17',
'2016-05-18',
'2016-05-19',
'2016-05-20',
'2016-05-21',
'2016-05-22',
'2016-05-23',
'2016-05-24',
'2016-05-25',
'2016-05-26',
'2016-05-27',
'2016-05-28',
'2016-05-29',
'2016-05-30',
'2016-05-31',
'2016-06-01',
'2016-06-02',
'2016-06-03',
'2016-06-04',
'2016-06-05',
'2016-06-06',
'2016-06-07',
'2016-06-08',
'2016-06-09',
'2016-06-10',
'2016-06-11',
'2016-06-12',
'2016-06-13',
'2016-06-14',
'2016-06-15',
'2016-06-16',
'2016-06-17',
'2016-06-18',
'2016-06-19',
'2016-06-20',
'2016-06-21',
'2016-06-22',
'2016-06-23',
'2016-06-24',
'2016-06-25',
'2016-06-26',
'2016-06-27',
'2016-06-28',
'2016-06-29',
'2016-06-30',
'2016-07-01',
'2016-07-02',
'2016-07-03',
'2016-07-04',
'2016-07-05',
'2016-07-06',
'2016-07-07',
'2016-07-08',
'2016-07-09',
'2016-07-10',
'2016-07-11',
'2016-07-12',
'2016-07-13',
'2016-07-14',
'2016-07-15',
'2016-07-16',
'2016-07-17',
'2016-07-18',
'2016-07-19',
'2016-07-20',
'2016-07-21',
'2016-07-22',
'2016-07-23',
'2016-07-24',
'2016-07-25',
'2016-07-26',
'2016-07-27',
'2016-07-28',
'2016-07-29',
'2016-07-30',
'2016-07-31',
'2016-08-01',
'2016-08-02',
'2016-08-03',
'2016-08-04',
'2016-08-05',
'2016-08-06',
'2016-08-07',
'2016-08-08',
'2016-08-09',
'2016-08-10',
'2016-08-11',
'2016-08-12',
'2016-08-13',
'2016-08-14',
'2016-08-15',
'2016-08-16',
'2016-08-17',
'2016-08-18',
'2016-08-19',
'2016-08-20',
'2016-08-21',
'2016-08-22',
'2016-08-23',
'2016-08-24',
'2016-08-25',
'2016-08-26',
'2016-08-27',
'2016-08-28',
'2016-08-29',
'2016-08-30',
'2016-08-31',
'2016-09-01',
'2016-09-02',
'2016-09-03',
'2016-09-04',
'2016-09-05',
'2016-09-06',
'2016-09-07',
'2016-09-08',
'2016-09-09',
'2016-09-10',
'2016-09-11',
'2016-09-12',
'2016-09-13',
'2016-09-14',
'2016-09-15',
'2016-09-16',
'2016-09-17',
'2016-09-18',
'2016-09-19',
'2016-09-20',
'2016-09-21',
'2016-09-22',
'2016-09-23',
'2016-09-24',
'2016-09-25',
'2016-09-26',
'2016-09-27',
'2016-09-28',
'2016-09-29',
'2016-09-30',
'2016-10-01',
'2016-10-02',
'2016-10-03',
'2016-10-04',
'2016-10-05',
'2016-10-06',
'2016-10-07',
'2016-10-08',
'2016-10-09',
'2016-10-10',
'2016-10-11',
'2016-10-12',
'2016-10-13',
'2016-10-14',
'2016-10-15',
'2016-10-16',
'2016-10-17',
'2016-10-18',
'2016-10-19',
'2016-10-20',
'2016-10-21',
'2016-10-22',
'2016-10-23',
'2016-10-24',
'2016-10-25',
'2016-10-26',
'2016-10-27',
'2016-10-28',
'2016-10-29',
'2016-10-30',
'2016-10-31',
'2016-11-01',
'2016-11-02',
'2016-11-03',
'2016-11-04',
'2016-11-05',
'2016-11-06',
'2016-11-07',
'2016-11-08',
'2016-11-09',
'2016-11-10',
'2016-11-11',
'2016-11-12',
'2016-11-13',
'2016-11-14',
'2016-11-15',
'2016-11-16',
'2016-11-17',
'2016-11-18',
'2016-11-19',
'2016-11-20',
'2016-11-21',
'2016-11-22',
'2016-11-23',
'2016-11-24',
'2016-11-25',
'2016-11-26',
'2016-11-27',
'2016-11-28',
'2016-11-29',
'2016-11-30',
'2016-12-01',
'2016-12-02',
'2016-12-03',
'2016-12-04',
'2016-12-05',
'2016-12-06',
'2016-12-07',
'2016-12-08',
'2016-12-09',
'2016-12-10',
'2016-12-11',
'2016-12-12',
'2016-12-13',
'2016-12-14',
'2016-12-15',
'2016-12-16',
'2016-12-17',
'2016-12-18',
'2016-12-19',
'2016-12-20',
'2016-12-21',
'2016-12-22',
'2016-12-23',
'2016-12-24',
'2016-12-25',
'2016-12-26',
'2016-12-27',
'2016-12-28',
'2016-12-29',
'2016-12-30',
'2016-12-31'
)

Ardından bu function’ı kullanacak şekilde ps_DayOfTheYear isminde bir partition scheme oluşturuyoruz:

CREATE PARTITION SCHEME [ps_DayOfTheYear] AS PARTITION [pf_DayOfTheYear] ALL TO ([PRIMARY])

Bu işlemin ardından table partitioning yapacak şekilde oluşturduğumuz partition scheme’yı kullanan LogTable ismindeki tablomuzu aşağıdaki şekilde create ediyoruz:

CREATE TABLE dbo.LogTable
(
LogId int identity(1,1),
Ad nvarchar(50),
ResimAd nvarchar(50),
Zaman datetime,
X int,
Y int,
PartitionNo AS (CAST(Zaman as date)) PERSISTED
CONSTRAINT [PK_LogTable] PRIMARY KEY CLUSTERED 
(
	PartitionNo ASC,
	LogId ASC
)ON ps_DayOfTheYear (PartitionNo)
)

Tablomuzda LogId identity değer üreten bir kolon olup PartitionNo ile birlikte Primary Key oluşturmaktadır. Ad, ResimAd, Zaman, X ve Y kolonları uygulama tarafından gönderilen bilgileri tutmak için oluşturulmuştur. PartitionNo kolonu ise Persisted Computed Column olup, Zaman kolonunun değerini date veritipine dönüştürerek kalıcı olarak tutmaktadır. Aynı zamanda PartitionNo kolonu bizim partition scheme‘mız tarafından kullanılacak ve bu kolondaki değerlere göre farklı günler farklı partition’larda saklanacaktır.

Bu aşamadan sonra tablomuz da hazır olduğuna göre Azure Stream Analytics job‘ının output ekranına geri dönebiliriz. Burada output olarak Azure SQL Database tercihini yapıp server, veritabanı, kullanıcı adı, şifre vb. istenilen bilgileri doğru bir şekilde giriyoruz. Aynı zamanda tablo kısmına da AltintasDb altınta oluşturduğumuz LogTable ismini giriyoruz. İşlemler tamamlandığında output’u oluşturup job’ı sayfanın alt kısmından Start butonuna basarak başlatıyoruz.

Yapmış olduğumuz senaryomuzu test etmek için daha önceki yazılarda olduğu gibi uygulamamız üzerinden resimlere tıklayarak click stream verisinin Azure Event Hubs’a yönlendirilmesini sağlıyoruz. Ardından bu veriler Azure Stream Analytics ile analiz edilecek ve job’ın output seçeneğinde belirttiğimiz Azure SQL Database’de bulunan AltintasDb veritabanındaki LogTable adlı tablomuza insert edilecektir. Yalnız burada dikkat ederseniz standart tek bir partition’dan oluşan bir tablo kullanmak yerine ölçeklenebilirlik ve yönetilebilirlik açısından daha performanslı ve faydalı olması için LogTable tablomuzu her günü ayrı bir partition’da tutacak şekilde oluşturduk. Bu nedenle senaryomuz gereği farklı günlerde uygulamayı kullanarak click-stream verisinin tablomuza nasıl insert edildiğini görmek istiyoruz.

Farklı tarihlerde gerekli verinin gönderilmesinin ardından tablomuzdaki verileri sorgulamak için aşağıdaki sorgumuzu çalıştırıyoruz:

SELECT *
FROM dbo.LogTable

Sorgumuzu çalıştırdığımızda sonuçlar aşağıdaki gibi geliyor:

azuresqldbsonuc

Sonuçlardan gördüğümüz kadarıyla uygulamamız üzerinden click- stream olarak gelen veriler 4 Eylül, 5 Eylül, 6 Eylül ve ekranda görmesek de 7 Eylül tarihlerinde tabloya insert edilmiş. Toplamda 48 adet veri tablomuzda bulunmakta. Peki LogTable tablomuz için oluşturduğumuz partition’lar doğru bir şekilde çalışıyor mu onu da test edelim. Her güne ait veriler ayrı bir partition’da tutuluyor mu bakalım. Bunun için aşağıdaki kod bloğunu çalıştırmamız yeterli olacaktır:

SELECT o.name as TabloAdı,
		i.name as IndexAdı, 
		partition_id, 
		partition_number, 
		[rows] as SatırSayısı
FROM sys.partitions p
INNER JOIN sys.objects o ON o.object_id=p.object_id
INNER JOIN sys.indexes i ON i.object_id=p.object_id and p.index_id=i.index_id
WHERE 
	o.name LIKE '%LogTable%'
	AND [rows] > 0
ORDER BY o.name, i.name DESC, partition_number ASC

Bu sorguda LogTable tablomuzda bulunan partition’lar için her bir partition’da ne kadar veri tutulduğu gösterilmektedir. Sorgunun sonucu aşağıdaki gibidir:

partitionsonuc

Sonuçlardan da görülebileceği üzere LogTable tablomuzda şu ana kadar 4 ayrı partition bulunmaktadır. 248 nolu partition (4 Eylül tarihini tutan partition) 6 kayıt tutarken, 249 nolu partition (5 Eylül) 17, 250 nolu partition (6 Eylül) 21 ve 251 nolu partition (7 Eylül) 4 kayıt tutmaktadır. Görüleceği üzere her güne ait veriler ayrı partition’larda tutulmaktadır. Bu verilerin toplamı tablomuzda tutulan toplam satır sayısı olan 48’e eşittir.

Bu makalemizde çok yüksek miktarda veri üreten sistemlerden stream olarak gelen verilerin Azure SQL Database‘de daha performanslı, ölçeklenebilir ve yönetilebilir olmasını sağlamak için oluşturduğumuz Table Partitioning  yapısını kullanarak parçalı bir şekilde tutulmasını sağladığımız yapıyı ele aldık. Örnek demomuz üzerinde senaryomuzu test ettik ve sonuçları inceledik. Advanced Data Analytics başlığı altındaki diğer yazılarımızla yine karşınızda olacağız. Bir sonraki makalemizde tekrar görüşmek üzere…

Umarım faydalı olur… Keyifli okumalar…

Yazar: Abdullah ALTINTAŞ

Real-time Click Stream Analizi İçin Microsoft Azure Çözümleri Serisi

Real-time click stream verisinin analizi için kullanabileceğimiz yöntemleri ve Microsoft Azure Çözümleri ile bu isteklerin nasıl çözümlenebileceğini ele aldığım yazı serisi (en azından şimdilik) tamamlandı. Bu yazı serisi içinde Microsoft Azure Event Hubs Servisi, Microsoft Azure Stream Analytics Servisi ve Power BI ürününü entegre ederek uçtan uca bir çözüm örneği gerçekleştirilmiş oldu. Serinin her bir parçası için bir makale yazdım, ancak toplu bir şekilde seriye ulaşmak isteyenler için de hepsini içeren bir yazı yazma gereği duydum. Umarım okurken keyif alır ve ihtiyacınıza göre faydalanırsınız.

Aşağıda sırayla yazılmış olan serinin her bir yazısını ve linkini paylaşıyorum:

  • Advanced Data Analytics Kavramına Giriş ve IoT (Internet of Things) Nedir

http://www.abdullahaltintas.com/index.php/advanced-data-analytics-kavramina-giris-ve-iot-internet-of-things-nedir/

 

  • Veri Edinme Seçenekleri (Azure Event Hubs, AWS Kinesis, Apache Kafka) 

http://www.abdullahaltintas.com/index.php/veri-edinme-secenekleri-azure-event-hubs-aws-kinesis-apache-kafka/

 

  • Microsoft Azure Event Hubs Servisi ile Veri Edinme

http://www.abdullahaltintas.com/index.php/microsoft-azure-event-hubs-servisi-ile-veri-edinme/

 

  • Microsoft Azure Stream Analytics Servisi

http://www.abdullahaltintas.com/index.php/microsoft-azure-stream-analytics-servisi/

 

  • Azure Event Hubs ve Stream Analytics ile Uçtan Uca Mimari Çözümü

http://www.abdullahaltintas.com/index.php/azure-event-hubs-ve-stream-analytics-ile-uctan-uca-mimari-cozumu/

 

  • Microsoft Azure Event Hubs Servisinin Ayağa Kaldırılması (Demo)

http://www.abdullahaltintas.com/index.php/microsoft-azure-event-hubs-servisinin-ayaga-kaldirilmasi-demo/

 

  • Microsoft Azure Stream Analytics Job’ının Oluşturulması (Demo)

http://www.abdullahaltintas.com/index.php/microsoft-azure-stream-analytics-jobinin-olusturulmasi-demo/

 

  • Microsoft Power BI ile Real-Time Click Stream Verisinin Görüntülenmesi (Demo)

http://www.abdullahaltintas.com/index.php/microsoft-power-bi-ile-real-time-click-stream-verisinin-goruntulenmesi-demo/

 

  • Microsoft Azure Stream Analytics Servisinin Konfigürasyonu ve Ölçeklendirilmesi

http://www.abdullahaltintas.com/index.php/microsoft-azure-stream-analytics-servisinin-konfigurasyonu-ve-olceklendirilmesi/

  • Stream Analytics ile Analiz Edilen Verinin Azure SQL Database’de Depolanması (Demo)

http://www.abdullahaltintas.com/index.php/stream-analytics-ile-analiz-edilen-verinin-azure-sql-databasede-depolanmasi-demo/

  • Stream Verinin Azure SQL Database’de Table Partitioning ile Tutulması (Demo)

http://www.abdullahaltintas.com/index.php/stream-verinin-azure-sql-databasede-table-partitioning-ile-tutulmasi-demo/

Keyifli okumalar dilerim…

Yazar: Abdullah ALTINTAŞ

Microsoft Azure Stream Analytics Job’ının Oluşturulması (Demo)

Bir önceki yazımızda Microsoft Azure Event Hubs servisi ile uygulama tarafından tıklamalar ile gelen verilerin elde edilmesi kısmını ele almıştık. Uygulamamızın devamında Microsoft Azure Event Hubs ile alınan verilerin nasıl anlık olarak analiz edilebileceğini göreceğiz.

Bu aşamaya kadar uygulamadan gelen verileri artık JSON formatında Event Hub’da topladığımıza göre artık gelen verileri analiz etmek için Microsoft Azure Stream Analytics servisini ayağa kaldırabiliriz. Stream Analytics servisini oluşturmak için Azure portal üzerinde sayfanın alt kısmında bulunan New sekmesine tıklayarak Data Services butonuna tıklanır. Açılan sekmeden Stream Analytics seçilerek ve Quick Create kısmında ilgili servisi oluşturmak için bir job tanımlanır. Burada “Job Name” kısmında ilgili Stream Analytics job’ına bir isim verilir. Ardından bu job’ın hangi bölgede çalıştırılacağı seçilir. Burada dikkat edilmesi gereken noktalardan birisi stream olarak akan veriyi tutmak için oluşturduğumuz Event Hub ile bunu analiz etmek için oluşturduğumuz Stream Analytics servislerinin aynı bölgede oluşturulması bize avantaj sağlayacaktır. Farklı bölgelerde oluşturulan servisler için bölgeler arası veri transferi için ek ücret ödemesi gerekeceği unutulmamalıdır.

Bu kısımda oluşturulan Stream Analytics job’ını monitör etmek için saklanması gereken log bilgilerini saklayabileceğimiz bir storage bilgisi girmemiz gerekmektedir. Daha önce tanımlı olan bir Blob Storage hesabı yoksa burada yeni bir storage account’u da oluşturulabilir. Oluşturulan Azure Blob Storage hesabına bir isim girilir.

stream analytics job olusturma

Gerekli bilgiler sağlandıktan sonra sayfanın sağ alt köşesinde bulunan “Create Stream Analytics Job” butonuna tıklanarak ilgili job oluşturulmuş olur. Oluşturulan job’ı başlatmak için sayfanın altında bulunan Start butonu bu aşamada disabled olarak gelmektedir. Bunun nedeni, henüz oluşturulan job için verileri nereden alacağımızı belirteceğimiz input, gelen veri üzerinde işlem yapmamızı sağlayacak Query ve sorgunun sonucunda üretilecek olan verileri aktaracağımız output seçeneklerini set etmemiş olmamızdır.

Oluşturulan job üzerine tıklatıldığında veri akışını izleyebileceğimiz Dashborad, operasyonel logları izleyebileceğimiz Monitor, veri girişini sağlayabileceğimiz Input, gelen verileri sorgulayabileceğimiz Query, Azure Machine Learning ile entegre edebileceğimiz Functions (yazım aşamasında henüz preview konumunda bulunmaktadır), çıktıları göndermek istediğimiz seçenekleri belirleyebileceğimiz Output, Stream Analytics servisinin ölçeklendirilebileceği Scale ve gerekli ayarların yapılabileceği Configure tabları bulunmaktadır. Ayrıca sayfanın sağ tarafında da yine job’a ait temel bilgiler yer almaktadır.

  • Input Oluşturma:

Oluşturulan Stream Analytics job’ı için verilerin nereden geleceğini set etmek için Input sekmesine tıklayarak “Add an Input” seçeneği seçilir. Burada gelen verinin stream olarak akan bir veri mi olduğu yoksa referans bir veri mi olduğu seçilebilir.

stream analytics job input

Bizim örneğimizde uygulamadan stream olarak gelecek olan akan bir veri olduğu için Data Stream seçeneği seçilir. Ardından stream olarak gelen veri için hangi kaynaktan veri geldiği seçilecektir. Event Hub, Blob Storage ve IoT Hub (Henüz preview modunda) buradaki seçeneklerdir.

stream analytics job input2

Bizim uygulamamızdan üretilen stream veri Event Hub’da toplandığından burada Event Hub seçeneğini işaretleyerek bir sonraki aşamaya geçilir.

stream analytics job input3

Gelen ekranda sorgulamak için kullanacağımız tabloya ait isim olacak olan Input Alias kısmına akılda kalıcı bir isim verilmelidir. Query kısmında SQL sorgusu yazılırken buradaki verilen isim tablo adı yerine kullanılacaktır. Örneğimizde appdata ismi verilmiştir. Burada ayrıca kullanılan hesap için Subscription, Namespace, Event Hub Name, Policy Name ve Consumer Group seçenekleri de uygun şekilde seçilmelidir.

stream analytics job input4

Input oluşturmak için son aşamada da Event Hub’dan gelen verinin hangi formatta serialize edileceği (JSON, AVRO, CSV) ve Encoding olarak hangi formatın seçileceği set edilecektir. Örneğimizde JSON ve UTF8 seçenekleri seçilmektedir.

  • Query Oluşturma:

Bu aşamaya kadar Event Hub ile alınan gerçek zamanlı click stream verisinin toplanması gerçekleştirilmiş oldu. Oluşturulan Stream Analytics job’ı için input tanımlandı ve Event Hub’dan gelen verinin job için veri kaynağı olacağı set edildi. Şimdiki aşamada ise input olarak gelen verinin Query kısmında yazılan SQL sorguları ile analiz edilmesi gerekmektedir. Bunu gerçekleştirebilmek için Stream Analytics job’ında Input seçeneğinin yanında yer alan Query tabına tıklayarak sorgu yazılabilecek olan sayfa açılmalıdır.

stream analytics job query

Açılan sayfada görülebileceği üzere Microsoft SQL Server için kullanılmakta olan T-SQL diline çok benzeyen hatta bu dilin birçok özelliğini destekleyen bir analiz sorgusu yazılabilmektedir. Burada FROM komutundan sonra yazılması gereken tablo adı yerine, bir önceki aşamada input oluştururken belirlenen “Input Alias” doğru bir şekilde yazılmalıdır.

stream analytics job query2

Örneğimizde Input Alias olarak belirlediğimiz “appdata” ifadesi tablo gibi görülecek ve Event Hub’dan gelen veriler bu şekilde sorgulanabilecektir. Yazılan sorgu istenilen şekilde tamamlandığında sayfanın alt kısmında bulunan Save butonu ile kaydedilmelidir. Bunun ardından eğer istenilirse yine sayfanın alt bölümünde yer alan Test butonu ile daha önceden elimizde bulunan veya elde edilebilecek JSON formatındaki uygulamanın ürettiği veri yazılan sorgu ile analiz edilerek test ekranında gelen veriler tablo formatında görüntülenebilecektir.

stream analytics job query test

Örnekte görülebileceği üzere, daha önce uygulama tarafından üretilen ve JSON formatında kaydedilen bir veri kümesi test edilmiş ve sorgu sonuçları test ekranında listelenmiştir.

Query ekranında gelen verilere ait bütün bilgiler SELECT * FROM appdata sorgusu ile beraber getirilebilirken, Stream Analytics sorgulama dilinde T-SQL dilinde olmayan bazı ek geliştirmeler de bizlere sunulmaktadır. Bunlardan en dikkat çekici olanlar “Windowing Concepts” adı verilen belirli bir zaman dilimi üzerinde ilgili sorgunun çalıştırılmasıdır. Stream Analytics sorgulama dilinde üç farklı windowing concept tanımlanabilmektedir. Bunlar; Tumbling Window, Hopping Window ve Sliding Window’dur.

Örneğimizde biz de Tumbling Window kullanarak uygulamadan gelen verileri “Resim Ad” kolonuna göre gruplayarak sadece son 60 saniye içinde tıklanan verilerin analiz edilmesini sağlamaktadır. Burada kullanılan sorguda yer alan TIMESTAMP BY komutu ise ilgili zaman bileşeninin uygulamada gerçekleşen zaman birimi mi yoksa Event Hub’a uygulamadan ilgili verinin geliş zamanını mı kullanılacağını belirtmek için kullanılabilmektedir.

stream analytics job query3

Yazılan yeni sorgu aynı örnek test datası kullanılarak tekrar test edilebilmekte ve çıktıları test ekranında görüntülenebilmektedir.

  • Output Oluşturma:

Yazılan uygulama tarafından üretilen gerçek zamanlı click stream verisi Event Hub’a aktarılmış ve oluşturulan Stream Analytics job’ına input olarak verilmiş, ardından yazılan Query ile akan stream verinin analizi yapılmıştı. Son aşamada ise analiz edilen veri çıktı (output) olarak bir yere aktarılacaktır.

stream analytics job output

Burada output seçeneklerinden hangisini tercih edeceğimiz ihtiyaca göre değişkenlik gösterebilmektedir. Örneğin analiz edilen veri kalıcı olarak bir yerde saklanmak isteniliyorsa Azure SQL Database kullanılarak ilişkisel bir veri tabanına aktarılabilir, daha sonra başka bir analizde kullanılmak için saklanmak isteniliyorsa istenilen formatta Azure Blob Storage üzerinde saklanabilir, ilişkisel olmayan bir veri tabanı yapısında tutulmak isteniliyorsa Azure DocumentDB veya key-value çiftleri olarak tutulmak isteniliyorsa Table Storage, başka uygulamalara tekrar analiz edilmek için gönderilmek isteniliyorsa Event Hub, Service Bus Queue, Service Bus Topic, gerçek zamanlı olarak raporlar halinde panolar oluşturularak görsel bir şekilde sunumu yapabilmek için de Power BI seçenekleri tercih edilebilir.

Örneğimizde gerçek zamanlı olarak uygulamaya tıklatılarak üretilen click stream verisinin analiz edilmesi sonucu oluşan çıktıyı gerçek zamanlı olarak raporlama ihtiyacımız olduğu için Power BI çıktı seçeneği bizler için output olarak seçilecektir.

stream analytics job output2

Power BI output seçeneği tercih edildiğinde karşımıza çıkacak olan ekranda var olan bir Power BI hesabımızın olup olmadığı sorulmaktadır. Eğer kurumsal bir domain üzerinde var olan bir Power BI hesabımız varsa “Existing Microsoft Power BI User” seçeneğini, henüz bir Power BI hesabına sahip değilseniz de hesap oluşturabilmek için “New User” seçeneğine tıklanmalıdır. Burada kullanılan Power BI hesabı Microsoft’a ait domainlerden (hotmail, outlook, windowslive vb) oluşturulduğunda kabul edilmemektedir. Bu nedenle şirket veya okul hesabınızı kullanarak Power BI hesabınızı oluşturmanız gerekmektedir.

stream analytics job output powrbi giris

Örneğimizde BilgeAdam domainine ait mail hesabımıza bağlı Power BI kullanıcı bilgileri girilerek bu işlem gerçekleştirilmektedir. İlgili hesap ile oturum açıldığında karşımıza output olarak girmemiz gerek bazı bilgi ekranları gelecektir.

stream analytics job output3

Output Alias”, “Dataset Name”, “Table Name” ve “Workspace” gibi bilgiler daha sonra kullanacağımızda anlamlı olması açısından uygun ifadeler ile isimlendirilmelidir. Bu bilgiler girildikten sonra işlem tamamlandığında stream verinin output tanımlanması tamamlanmış olacaktır.

stream analytics job output4

  • Stream Analytics Job’ının Çalıştırılması:

Output bilgisi de tanımlanan Stream Analytics job’ı için daha önce pasif durumda bulunan ve tıklanamayan sayfanın alt bölümündeki Start butonu artık aktif hale gelmiş durumdadır. Uygulama tarafından üretilen ve Event Hub’a aktarılan, orada toplana click stream verileri artık job’ın çalıştırılmasıyla birlikte Stream Analytics tarafından input olarak alınacak, analiz edilecek ve output olarak Power BI hesabına analiz sonuçları gönderilecektir.

Oluşturulan Stream Analytics job’ını çalıştırmak için sayfanın alt kısmında bulunan Start butonuna tıklandığında karşımıza hangi zaman diliminden itibaren gelen veriler ile bu job’ın çalıştırılacağı sorulan bir ekran gelmektedir.

stream analytics job execute

Burada ilgili job’ın başlatıldığı andan itibaren gelen verileri kullanarak analiz gerçekleştirebileceğimiz “Job Start Time” ve istenilen herhangi bir başlangıç zamanından itibaren gelen verilerin analiz edilebileceği “Custom Time” seçenekleri mevcuttur. Örneğimizde job’ın başlatıldığı andan itibaren gelen verileri analiz etmek istediğimiz için “Job Start Time” seçeneği seçilerek işlem tamamlanmış ve Stream Analytics job’ı başlatılmıştır.

stream analytics job execute2

Oluşturulan Stream Analytics job’ı için herhangi bir hata ile karşılaşılmadığında ilgili job başlatılabilecek ve Dashboard tabına tıklandığında verilerin geldiğini ve sayfanın sağ tarafında yer alan Status kısmında da ilgili job’ın başarılı bir şekilde çalıştığını belirten “Running” ifadesini görebilmekteyiz.

Bu yazımızda daha önce Event Hub servisi ile alınan stream verisinin Stream Analytics job’ına nasıl input olarak verildiği, yazılan sorgular ile nasıl analizinin yapılabildiği ve tanımlanan output ile analiz edilen verinin nasıl dışarıya aktarılacağını ele aldık. Bir sonraki yazımızda output olarak alınan verinin Power BI portali üzerinde nasıl anlık olarak dashboard’lar ile görüntülenebileceğini örnek uygulama ile ele alacağız.

Keyifli okumalar…

Yazar: Abdullah ALTINTAŞ

Microsoft Azure Event Hubs Servisinin Ayağa Kaldırılması (Demo)

Serinin daha önceki yazılarında stream olarak hızlı bir şekilde akan verinin elde edilmesi ve analizinin gerçekleştirilmesi için kullanabileceğimiz seçeneklerden ve genel mimariden bahsetmiştik. Microsoft Azure Event Hubs ve Microsoft Azure Stream Analytics servislerinin bu amaçla ne gibi çözümler sağladığını açıklamaya çalıştık. Bu yazımızda Microsoft Azure Event Hubs ile bir uygulamadan gelen click stream verilerinin nasıl elde edilebilineceğini örnek bir uygulama yaparak göstereceğiz.

Örnek uygulamada yazılan bir .Net uygulamasına belirli görsel fotoğraflar konulmuştur. Bu uygulama bir web sitesini simule ediyor gibi düşünülebilir. Kullanıcılar uygulamaya bağlandıklarında istedikleri yerlere tıklayarak işlemlerini gerçekleştirebilmektedir.  Bu tıklamalar örneğimiz için veri kaynağını oluşturmaktadır.

Uygulamada amacımız gelen verileri Event Hubs ile toplayarak Stream Analytics için veri input’u olmasını sağlamaktır. Stream Analytics ile alınan veriler analiz edilerek sorgular yazılabilecek ve buradan dönen sonuçlar output olarak Power BI’ya yönlendirilerek anlık olarak gerçek zamanlı tıklamalar raporlanabilecektir.

  • MICROSOFT AZURE HESABI OLUŞTURULMASI

Örneğimizde ilk olarak yazmış olduğumuz uygulamanın üreteceği verileri tutacak olan Microsoft Azure Event Hubs servisi kurulacaktır. Bunu için herhangi bir Microsoft kullanıcı hesabınız ile aylık ücretsiz 610 TL kullanım imkanı sunulan Microsoft Azure hesabı alabilmektesiniz. Ücretsiz Azure hesabı açmak için https://azure.microsoft.com/tr-tr/ adresine giderek yeni bir Azure hesabı oluşturabilmektesiniz. Yeni bir ücretsiz hesap açarken bile telefon numarası ve kredi kartı bilgileri girilmesi gerekmektedir. Kullanım süresi dolduğunda ücretli olarak kullanmaya devam etmeniz için onay vermeniz gerekmektedir. Onayınız olmadan kredi kartınızdan herhangi bir kesinti yapılmamaktadır.

  • MICROSOFT AZURE EVENT HUBS SERVİSİNİN OLUŞTURULMASI

Microsoft Azure hesabını açtıktan sonra ilk olarak verileri geçici olarak tutmak için kullanacağımız Azure Event Hubs servisini oluşturmamız gerekmektedir. Event Hubs oluşturmak için Azure portali üzerinde altta bulunan New sekmesine tıklanarak açılan servislerden App Services kısmına tıklanır. Açılan servisler listesinden Service Bus seçilir. Ardından gelen ekranda Event Hub seçeneğine tıklanarak yan tarafta açılan Quick Create butonuna tıklanır. Gelen ekranda oluşturulacak olan Event Hub’a bir isim verilmelidir. Oluşturulmak istenilen Event Hub servisinin hangi bölgede olacağı seçildikten sonra, namespace kısmında verilen Event Hub ismine göre bir namespace otomatik olarak oluşturulacaktır. Bu işlemler tamamlandıktan sonra sayfanın en altında bulunan Create a New Event Hub kısmına tıklanarak Event Hub’ın oluşturulması sağlanır.

azure portal ana ekran

Bu aşamada arka tarafta yapılan işlemler ve işlemin hatasız bir şekilde tamamlanıp tamamlanmadığı bilgisini sayfanın altında bulunan kısımdan (ribbon) takip edebilirsiniz.

azure portal ana ekran2

Oluşturulan Event Hub’a ilgili uygulamalardan bağlanıp veri gönderebilmek için sayfada ilgili Event Hub ismine tıklanır. Gelen ekranda oluşturulan Event Hub için veri akışını izleyebileceğiniz Dashboard, Event Hub için gerekli ayarları yapabileceğiniz Configure ve her bir Event Hub’ın dahil edildiği Consumer Group ayarlarını yapabilmek için Consumer Group tabları bulunmaktadır. Ayrıca bu ekranın sağ tarafında oluşturulan Event Hub ile ilgili Status, Event Hub URL, Operation Logs, Retention, Partition Count ve Namespace bilgilerini bulabilmektesiniz.

azure portal ana ekran3

Oluşturulan Event Hub servisine dışarıdan bir uygulama bağlanacağı için gerekli yetkiye sahip olması gerekmektedir. Bu nedenle dışarıdan ilgili Event Hub’a erişim için Configure tabına gelerek “manage” ismini verdiğimiz bir shared access policy oluşturmamız gerekmektedir. İlgili tam yetkiye sahip olabilmek için Manage, sadece veri gönderimi için Send, gelen verileri dinlemek için Listen olarak gelen seçeneklerden uygulamamız için Manage yetkisini seçmekteyiz.

event hub config

Ayrıca bu sayfada Event Hub’ın verileri ne kadar geçmişe dönük olarak saklayacağı set edilebilmektedir. Default olarak 1 gün olarak gelen bu seçeneği 30 güne kadar çıkarmak mümkündür. Benzer şekilde Event Hub’ın aktif veya pasife çekilmesi yine bu ekrandan sağlanabilmektedir.

Microsoft Azure Event Hub, partition yapısına göre tasarlanmış bir çözümdür. Ne kadar çok veriyle çalışacaksak partition sayısının o kadar fazla olması gerekmektedir. Her bir partition 1MB/sec veri alabilmektedir. Default olarak 4 partition ile oluşturulan bir Event Hub için bu değer ihtiyaca göre artırılıp azaltılabilmektedir. Event Hub için partition sayısı ne kadar yüksek olursa paralel olarak alınabilecek veri miktarı da o kadar yüksek olacaktır. Tabi bu da diğer yandan kullanım ücretine yansıyacaktır.

Bu sayfada gerekli ayarlar yapıldıktan sonra sayfa altında bulunan Save butonuna tıklanarak gerekli değişiklikler kaydedilir. Bu aşamada ilgili Event Hub oluşturulması tamamlanmış durumdadır. Yapılması gereken sadece uygulamadan buraya bağlantı kurabilmemiz için gerekli olan bağlantı cümlesini (connection string) buradan almamız gerekmektedir. Bunun için de ilgili Event Hub için Dashboard tabına tıkladığımızda sağ tarafta bulunan View Connection String kısmına tıklayarak gerekli bilgiler alınabilir.

event hub yetki

Açılan sayfada oluşturulan “manage” ismindeki shared access policy için gelen connection string bilgisi kopyalanabilir.

  • UYGULAMA AYARLARININ YAPILMASI

Event Hub oluşturma işlemi tamamlandığına ve uygulamadan bağlanabilmek için gerekli olan izinler verilip connection string elde edildiğine göre yazılan uygulamamızda gerekli ayarları artık yapmamız gerekmektedir. Bunun için daha önce yazmış olduğumuz tıklama verilerini alacağımız uygulama içinde Event Hub için gerekli olan bağlantı bilgisi ilgili yere eklenir.

Yazılan uygulama içinde conneciton bilgisi ister direkt olarak kod içerisinde istenirse de appconfig dosyası içinde set edilerek alınabilir.

event hub kod1

Oluşturulan connection için Event Hub üzerinde oluşturulan ve kopyalanan connection string bilgisi burada kullanılır.

event hub kod2

Uygulamadan üretilen bilgiler (tıklanan noktaya ait X ve Y koordinatları, tıklayanın adı, tıklanan nesnenin adı, olay tarihi vb.) daha sonra Stream Analytics servisine gönderileceği için serialize edilmelidir. Bunun için geçerli olan daha önce de bahsedilen JSON, CSV ve AVRO seçenekleri mevcuttur. Örneğimizde üretilen datalar JSON formatına serialize edilmektedir.

event hub kod3

Uygulamada yazılan kodlar ile program çalıştırıldığında üzerine tıklanılan resim ile ilgili bilgiler JSON formatına serialize edilerek connection bilgisi girilen Event Hub’a gönderilmektedir.

Uygulamayı çalıştırdığımızda karşımıza çıkan ekranda “Event Hub Name” kısmına oluşturmuş olduğumuz Event Hub’ın adını giriyoruz. Bizim örneğimizde altintashub olarak belirlemiştik. Connection String kısmına da manage isminde tanımlamış olduğumuz shared access policy için kopyaladığımız connection string bilgisini girmemiz gerekiyor. Bu bilgileri az önce belirttiğimiz gibi appconfig dosyasında tanımlayıp böyle bir giriş ekranı tanımlamamıza gerek kalmadan da oluşturabilirdik. Bu işlemleri tamamlayıp Connect butonuna tıkladığımızda uygulamamız herhangi bir hata olmaması durumunda Microsoft Azure Event Hub servisine bağlanacak ve tıklama verileri Event Hub’a JSON formatında serialize edilerek gönderilecektir.

uygulama ekrani1

Bu aşamada artık uygulama üzerinde tıklama işlemleri ile veri oluşturabilir ve Event Hub’a gönderilmesini sağlayabiliriz. “Your Name” kısmına tıklayan kullanıcı adı olarak kendi adımızı yazabiliriz. Örneğimizde biz altintas olarak bu kısmı dolduruyoruz. Ardından ekran üzerinde istediğimiz bir bölüme tıklayarak veri oluşturulmasını sağlayabiliriz. Oluşturulan veriler JSON formatına göre serialize edilerek hem Event Hub’a gönderilecek hem de görmemiz için uygulamanın altında bulunan listede tıklandıkça JSON verisi listelenecektir.

uygulama ekrani2

Bu yazımızda Microsoft Azure hesabının açılması, Azure Event Hubs servisinin configure edilmesi ve son kısımda da yazılan uygulama ile bağlantısının yapılıp tıklama verilerinin Event Hub‘a aktarılmasını bir örnek üzerinde incelemiş olduk. Bir sonraki yazımızda Event Hub‘a gelen verilerin gerçek zamanlı olarak analizinin yapılmasını sağlayacak olan Azure Stream Analytics servisi üzerinde örneğimize devam edeceğiz.

Görüşmek dileğiyle…

Yazar: Abdullah ALTINTAŞ

Veri Edinme Seçenekleri (Azure Event Hubs, AWS Kinesis, Apache Kafka)

Bir önceki yazımızda Advanced Data Analytics kavramından ve stream olarak gelen büyük verinin analiz edilmesinin gerekliliğinden bahsetmiştik. Özellikle Internet of Things (IoT) cihazları başta olmak üzere saniyede milyonlarca veri üretebilen sistemler günümüzde hiç de az değil. Üstelik bu kadar kısa sürede üretilen bu kadar büyük verileri bir yerde depolamak ve ardından standart iş zekası çözümleri ile analizini yapmak pek mümkün de olmamaktadır. Saniyede milyonlarca veri üreten bir sistemin verilerini ilişkisel bir veritabanı sisteminde tutmak şu anda mümkün değildir. Böyle senaryolar için stream olarak üretilen büyük miktarda verinin elde edilmesi ve gerekli analizlerin yapılması için geçici bir ortamda tutulabilmesi gerekmektedir.

Stream_3

Teknoloji firmaları bu gibi ihtiyaçları karşılayabilmek için çeşitli çözümler üretip şirketlerin kullanımına sunmaktadır. Bunlara örnek olarak en başta Microsoft’un Azure portali üzerindeki çözümlerinden olan Azure Event Hubs verilebilir. Yine aynı şekilde yüklü miktarda veriyi elde etmek için Amazon Web Services (AWS) Kinesis ve Apache Kafka gibi sistemler çözüm olarak sunulabilecek diğer örneklerdendir. Bunların dışında da kullanılabilecek başka çözümler ve custom geliştirmeler olabileceği gibi, şu anda en yaygın kullanımı olan, kullanımı en kolay yöntemler olarak bu servisleri sayabilmekteyiz. Aşağıdaki şekilde farklı kaynaklardan stream verinin elde edilmesi ve ardından bu verilerin analiz aşamasına yönlendirilmesi konusundaki mimari yer almaktadır. Event Hub ve Stream Analytics servislerinin yapısını aktaran bu mimari şemaya ait detayları ilerleyen yazılarımızda ayrıca ele alacağız.

6327.image_thumb_5D0180F9

Microsoft Azure Event Hubs dışında diğer yaygın kullanımlardan olan Amazon Web Services (AWS) Kinesis‘e ait benzer çalışma metodolijisine ait yapıyı da aşağıda bulabilirsiniz.

awskinesis

Benzer şekilde stream olarak akan verinin elde edilmesi açısından kullanılabilecek üçüncü bir çözüm olarak Apache Kafka da kullanılabilmektedir. Kafka ürününde de veri elde etme açısından avantaj sağlayacak noktalar bulunmaktadır. Aşağıda genel olarak benzer bir işlem olan çözümü görebilirsiniz.

current-and-future-of-apache-kafka-9-638

Her üç seçenek de aslında benzer amaçla kullanılabilmektedir. Genel amacımız stream olarak üretilen çok büyük miktardaki verilerin anlık olarak analizlerinin yapılabilmesi için verilerin tutulabileceği geçici bir ortam sağlamalarıdır. Elde edilen ve burada geçici olarak tutulan veri daha sonra veri analizi için kullanılabilecek servislere veri kaynağı görevi görecektir. Örneğin Microsoft Azure çözümleri ele alındığında Azure Event Hubs ile elde edilen veriler analiz edilmek için Azure Stream Analytics servisine aktarılacak ve burada analizi yapılarak istenilen işlemler gerçekleştirilebilecektir.

Bu üç servis çözümü için daha detaylı bilgileri ve özellikle Microsoft Azure Event Hubs çözümünün detaylı bilgileri ve uygulanması ile ilgili ilerleyen yazılarda bilgi vereceğim. Devamı gelecek… 🙂

Faydalı olması dileğiyle…

Yazar: Abdullah ALTINTAŞ

Dipnot: Yazı içinde kullanılan görsel öğeler için Microsoft Azure Documentation sayfası ve çeşitli kaynaklardan faydalanılmıştır.